亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

探究:如何判斷Delphi中的對(duì)象指針是否可用

2019-11-18 18:48:21
字體:
供稿:網(wǎng)友

近日,在網(wǎng)上看到有網(wǎng)友問曰:如何確定一個(gè)對(duì)象指針是否可用?也就是說,如何確定一個(gè)對(duì)象指針是否指向一個(gè)真正可用的對(duì)象實(shí)例?其實(shí)這本不應(yīng)該成為一個(gè)問題。因?yàn)閷?duì)于程序設(shè)計(jì)者來說,他應(yīng)該能夠控制自己的程序不去訪問一個(gè)無效的指針,因?yàn)樗械膶?duì)象實(shí)例的創(chuàng)建和銷毀都在他控制之下。并且即便沒有一個(gè)直接的辦法來判斷對(duì)象指針是否可用,也可以通過其他間接的途徑(比如使用一些標(biāo)識(shí)等)來做到這一點(diǎn)(比如當(dāng)我們銷毀一個(gè)對(duì)象實(shí)例后,我們將對(duì)象指針的指置為nil)。但是假如我們拋開以上所說的這兩點(diǎn)不談,單單來研究在Delphi中,究竟有沒有辦法來判斷一個(gè)對(duì)象指針是否可用,那情況會(huì)如何呢?

Object Pascal中,一個(gè)類可以有兩種類型的方法,一種稱為對(duì)象方法(Object Method),另一種是類方法(Class Method)。所謂對(duì)象方法,指的是方法的定義是針對(duì)對(duì)象(或稱實(shí)例)的,因此調(diào)用該方法需要基于某個(gè)對(duì)象(或稱實(shí)例),比如類的析構(gòu)函數(shù)Destroy就是一個(gè)對(duì)象方法(其實(shí)我們經(jīng)常用到的絕大部分方法都是對(duì)象方法)。而類方法,指的是方法的定義是基于一類對(duì)象而言,因此調(diào)用該方法不需要基于特定的對(duì)象實(shí)例,比如類的構(gòu)造函數(shù)Create就是如此。這一點(diǎn),對(duì)我們有些啟發(fā)。判斷一個(gè)對(duì)象指針是否可用,似乎可以通過以下步驟來完成。首先,我們可以判斷該對(duì)象指針是否是nil,如果是,那么大功告成,確定不可用無疑;如果否,那么嘗試執(zhí)行該對(duì)象的某個(gè)對(duì)象方法,看看是否出現(xiàn)諸如無效內(nèi)存訪問等的異常,由此來判斷該對(duì)象是否可用。用如下代碼來驗(yàn)證我們的想法:

var

Obj: TObject;

begin

  Obj := TObject.Create;  //1.創(chuàng)建一個(gè)對(duì)象

  Obj.Free;             //2.釋放剛剛創(chuàng)建的對(duì)象,此時(shí)內(nèi)存被回收

  If Obj = nil then        //3.判斷指針是否為空,(這一步往往不成功,因?yàn)閷?duì)象

//被釋放,Delphi也不會(huì)自動(dòng)將對(duì)象指針置空)

    ShowMessage(‘對(duì)象指針不可用。’)

  else

  begin

       Try

If Obj.ClassType = TObject then  //4.調(diào)用TObject的一個(gè)對(duì)象方法

ShowMessage(‘對(duì)象類型為TObject’);

        Except

          ShowMessage(‘對(duì)象指針不可用。’)

        End;

  end;

end;

執(zhí)行上述代碼,我們發(fā)現(xiàn),即使Obj.Free已經(jīng)執(zhí)行,Obj.ClassType依然可用。這表明,并不是所有的對(duì)象方法一定要依賴于某個(gè)對(duì)象實(shí)例才能夠訪問。究其原因,是因?yàn)檫@個(gè)對(duì)象方法不需要訪問某個(gè)對(duì)象實(shí)例所申請(qǐng)的內(nèi)存。從這個(gè)意義上來說,TObject.ClassType方法并不象是一個(gè)是真正的對(duì)象方法,而頗有些類方法的味道。

執(zhí)行上述代碼,我們還可以發(fā)現(xiàn),一個(gè)對(duì)象執(zhí)行Free方法,只是將其在創(chuàng)建時(shí)所申請(qǐng)的內(nèi)存釋放全部釋放,但是并不影響到對(duì)象指針本身的值。對(duì)象指針還是指向原來的內(nèi)存地址。同時(shí),由于某些對(duì)象方法(如ClassType)實(shí)現(xiàn)的特殊性,即使對(duì)象已經(jīng)被釋放了,對(duì)象方法的調(diào)用結(jié)果仍然正確。

綜上所述,我們可以得出一個(gè)結(jié)論,那就是,一個(gè)對(duì)象指針是否能夠被判斷為是否可用,要看該對(duì)象指針?biāo)鶎俚念?,是否提供了訪問對(duì)象實(shí)例內(nèi)存的途徑――這個(gè)途徑可以是方法,也可以是屬性。那么,現(xiàn)在具體到各個(gè)類中,情況又如何呢?

TObject,該類是所有類的祖先類,沒有辦法作出判斷。

TPersistent,由TObject派生而來,創(chuàng)建對(duì)象實(shí)例時(shí)不需要申請(qǐng)額外的內(nèi)存,所以也沒有辦法判斷。

TComponent,由TPersistent派生而來,增加了許多在創(chuàng)建對(duì)象實(shí)例時(shí)需要申請(qǐng)額外內(nèi)存的屬性,所以從理論上來說,它是可判斷的。代碼如下:

function ComponentExists(AComponent: TComponent): Boolean;

begin

  try

    AComponent.Hasparent; //注意:這個(gè)句子也可以為”AComponent.Tag;”

                         //或者為”AComponent.Name”

    result := True;

  except

    result := False;

  end;

end;

通過調(diào)用ComponentExists,我們可以得知一個(gè)TComponent類型的對(duì)象指針是否可用,而不管該對(duì)象指針是否已經(jīng)被釋放,是否被置為nil。

其他類,如TControl,TWinControl,或者TButton等等,只要是由TComponent派生而來,則TComponent的判斷方法依然適用。

還有其他一些用戶自定義的類,若是直接由不能判斷的類(比如TObjectTPersistent)派生而來,但是沒有需要在實(shí)例化時(shí)申請(qǐng)內(nèi)存的屬性,那么也沒有辦法判斷;反之,則可以。據(jù)個(gè)例子來說:

假設(shè)我們有一個(gè)TPerson類,定義如下:

TPerson = Class(TObject)

PRivate

  FSex: TSex; // TSex 是枚舉類型的性別;

  FFirstName: String;

  FLastName: String;

  //…

Public

  property Sex: TSex read FSex write FSex;

  property FirstName: String read FFirstName write FFirstName;

  property LastName: String read FLastName write FLastName;

  //…

end;

那么,對(duì)于TPerson類型的指針Person,可以用如下代碼判斷指針是否可用:

       Try

Person.Sex;

//或者 Person.FirstName;

//或者 Person.LastName;

result := True; //指針可用

Except

  result := False;//指針不可用

end;

   

以上我們探討的只是一種技術(shù)上的可能性。想要強(qiáng)調(diào)的一點(diǎn)是,即使有一個(gè)好的可行的辦法,也不鼓勵(lì)經(jīng)常這么做。因?yàn)椋粋€(gè)邏輯嚴(yán)密的程序,本來就應(yīng)能夠杜絕去訪問一個(gè)無效的指針。

   更多文章

 


上一篇:用DELPHI給OICQ動(dòng)手術(shù)(一)

下一篇:動(dòng)態(tài)賀卡EXE生成器---Delphi中流的應(yīng)用(9)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

日韩一区二区免费在线观看| 亚洲精品自拍网| 国产大尺度视频| 日韩一区二区精品视频| 1区2区3区欧美| 欧美高清在线精品一区| 国产97在线观看| 亚洲精品免费在线视频| 综合在线亚洲| 久久国产精品美女| 天天干天天草天天射| 国产一区二区三区影院| 日本片在线观看| 美女扒开尿口让男人操亚洲视频网站| 少妇高潮大叫好爽喷水| 国产揄拍国内精品对白| 在线欧美视频| 激情综合网址| bdsm精品捆绑chinese女| 拔插拔插海外华人免费| 国产精品扒开腿做爽爽爽的视频| 成人全视频在线观看在线播放高清| 日韩美女视频在线| 国产综合精品在线| 亚洲成a人v欧美综合天堂| 精品视频在线视频| 色综合色综合久久综合频道88| 九热这里只有精品| www.射射射| 国产情人节一区| 日韩中文av在线| 欧美成人h版在线观看| 国产成人精品免费视| 在线亚洲欧美视频| 精品久久国产老人久久综合| 桃色av一区二区| 国产成人精品999在线观看| 免费a级黄色片| 国产精品探花一区二区在线观看| dy888亚洲精品一区二区三区| 污视频在线免费观看网站| 日韩avxxx| 在线成年人视频| 欧美成人一区二区三区四区| 色妇色综合久久夜夜| 国产欧美日韩综合精品| 日产精品一区二区| 男人的天堂官网| 91福利视频久久久久| 国产影视一区二区| 99这里有精品| 亚洲一二三专区| 国产一区二区三区精彩视频| 国产又粗又猛又爽又黄视频| 青青草国产一区二区三区| 欧美国产在线视频| 国产乱码久久久| 国产suv精品一区二区6| 在线观看日韩中文字幕| 男人的天堂avav| 免费无码国产v片在线观看| 久久一留热品黄| 国内老熟妇对白hdxxxx| 久久久亚洲网站| 成人网在线免费看| 岛国av一区二区在线在线观看| 日韩欧美主播在线| 欧美五级在线观看视频播放| 国产一区二区三区影视| 2020中文字字幕在线不卡| 污污网站免费在线观看| 亚洲精品69| 中国字幕a在线看韩国电影| 精品中文视频在线| 人妻少妇精品无码专区久久| 欧美成人精品在线| 制服丝袜综合日韩欧美| 日韩中文字幕免费在线观看| 亚洲精品乱码久久久久久| 欧美一区日本一区韩国一区| 精品一区二区三区免费毛片爱| 国产精品亚洲天堂| 999av小视频在线| 国产成人无码精品亚洲| 欧美巨猛xxxx猛交黑人97人| 在线观看视频欧美| 久久精品美女| a黄色片在线观看| 欧美1区视频| 国产99视频在线| 日本一区二区网站| 日韩欧美国产精品一区| 91久久精品国产91久久性色tv| 国产美女精品视频免费观看| 国产成人的电影在线观看| 成人在线视频免费| 日本高清免费在线视频| 99在线免费视频| 天天操天天射天天插| 亚洲va韩国va欧美va| 亚洲午夜女主播在线直播| 亚洲国产wwwccc36天堂| 美女脱光内衣内裤| 亚洲国产精品久久久久秋霞蜜臀| 五月综合网站| 欧美精品尤物在线| 欧美日本精品一区二区三区| 在线亚洲美日韩| 久久久精品人妻无码专区| 91丝袜呻吟高潮美腿白嫩在线观看| 国产免费一区二区三区最新6| 日本在线观看免费| 东京热av一区| 欧美成aaa人片免费看| 91精品欧美久久久久久动漫| 国产一区二区波多野结衣| 久久精品免费一区二区三区| 蜜臀久久精品久久久久| 国产乱子轮精品视频| 精品在线不卡| 日韩免费在线视频观看| 亚洲18在线看污www麻豆| 亚洲va在线va天堂| 黄色片在线免费看| 亚洲视屏一区| 精品免费久久久久久久| 超碰97在线免费观看| 国产精品美女久久久久aⅴ国产馆| 国产精品乱码久久久久| 欧洲精品视频在线| 欧洲一区二区三区在线| 性欧美videos另类hd| 99久热这里只有精品视频免费观看| 喷水一区二区三区| 国产又黄又粗又猛又爽的| 高清毛片在线看| 久久久精品国产99久久精品芒果| 欧美另类69xxxxx| 亚洲在线偷拍自拍| 一区二区免费电影| 中文字幕在线网址| 久久久水蜜桃av免费网站| 亚洲精品永久免费精品| 亚洲 欧美 变态 另类 综合| 91在线视频播放地址| 国产女人在线观看| 日本黄色中文字幕| 午夜欧美视频在线观看| 欧美精品一区二区三区在线看午夜| 中文字字幕在线中文乱码| 亚洲视频欧美在线| 麻豆av一区| 粉嫩精品一区二区三区在线观看| 毛片免费看不卡网站| xxxx性bbbb欧美野外| 亚洲日本aⅴ片在线观看香蕉| 五月亚洲综合| 亚洲国产精品99| 国产激情自拍视频| 亚洲人精品午夜在线观看| 999精品免费视频| 中文子幕无线码一区tr| jizz免费看| 亚洲欧美小说色综合小说一区| av一级毛片| 亚洲国产尤物| 制服丝袜在线第一页| 在线免费高清一区二区三区| 少妇高潮一区二区三区99| 伊色综合久久之综合久久| 国产一区二区无遮挡| 精品自拍偷拍| 色妞在线综合亚洲欧美| 一卡二卡三卡亚洲| 99久久精品国产亚洲| 国产精品午夜剧场| 亚洲视频在线播放| 色橹橹高清视频在线播放| 国产精品中文久久久久久| 日韩精品欧美激情| 另类综合日韩欧美亚洲| 国产一区二区三区亚洲| 亚洲精品理论电影| 日韩成人一区二区三区| 国产一区二区视频免费在线观看| 久久福利毛片| 一区二区亚洲欧洲国产日韩| bdsm精品捆绑chinese女| 日本污视频在线观看| 成人区精品一区二区| 欧美人狂配大交3d怪物一区| 二区三区偷拍浴室洗澡视频| 国产一区二区你懂的| 日本视频中文字幕一区二区三区| 亚洲综合第一| 99成人国产精品视频| 欧美偷拍一区二区三区| 国产农村老头老太视频| 护士精品一区二区三区| 亚洲黄色av女优在线观看| 精品1卡二卡三卡四卡老狼| www.久久av| 五月天av网站| 亚洲国产欧美一区二区三区丁香婷| 香蕉视频官网在线观看日本一区二区| 国产精品18在线| 一个人免费观看视频www在线播放| 中文字幕第八页| 91色在线看| 国产精品伦一区二区三级视频| 欧美黑白配在线| 欧美精品v日韩精品v韩国精品v| 中文字幕一区二区三区四区五区人| 欧美人与禽猛交乱配视频| 精品国产乱码久久久久久夜甘婷婷| 黑人与娇小精品av专区| 中文字幕久久午夜不卡| 色婷婷精品久久二区二区蜜臀av| 国产又大又黄又粗又爽| 99精品热视频| 中文字幕va一区二区三区| www视频免费看| 国产三线在线| 成人激情视频| 91精品一区二区| 欧美成人免费全部网站| 亚洲av人人澡人人爽人人夜夜| 欧美国产极速在线| 少妇人妻大乳在线视频| 一区二区三区四区视频精品免费| 特黄特黄的视频| 888av在线视频| 精品免费国产一区二区三区四区| 在线观看黄色小视频| 国产老熟女伦老熟妇露脸| 精品黑人一区二区三区在线观看| jizzjizz在线| 特级西西444www大精品视频免费看| 99亚洲伊人久久精品影院红桃| 粉嫩av一区二区三区粉嫩| 99视频在线精品国自产拍免费观看| 日韩精品一区二区三区色欲av| 一级做a爱片性色毛片| a级片免费视频| 日本一区二区在线观看视频| 日韩在线观看一区| 国产精品美女| 污污网址在线观看| 狠狠狠狠狠狠狠| 欧美一区二区三区喷汁尤物| 欧美不卡一二三| 国产福利电影一区二区三区| 国产美女作爱全过程免费视频| 欧美二级三级| 一二三四在线视频观看社区| 91精品国产色综合久久不卡蜜臀| 国产高清在线精品一区二区三区| 久久久9色精品国产一区二区三区| 国产免费久久久久| 黄色片网站免费在线观看| 亚洲国产999| 亚洲激情视频| 国产呦萝稀缺另类资源| 国产精品久久久久永久免费观看| 妞干网在线视频观看| 国产精品99久久久久久似苏梦涵| 在线观看免费av网| 加勒比海盗1在线观看免费国语版| 国产美女高潮久久白浆| 成人免费毛片高清视频| 中文字幕在线观看欧美| 亚洲自拍的二区三区| 亚洲国内自拍| 国产网友自拍视频| 国产一区二区三区四区五区| 亚洲一卡二卡| 99thz桃花论族在线播放| 国产精品99久久久久久似苏梦涵| 中文字幕999| 草草视频在线观看| 亚洲综合伊人久久| 日韩精品1区2区3区| 亚洲精品美女| 天天干天天舔天天射| 天天av天天翘天天综合网| 中文字幕在线观看一区| 日韩中文字幕视频网| 国产精品第十页| aaa欧美日韩| 91首页免费视频| 91精品国产自产拍在线观看蜜| 国产精品亚洲人成在99www| 波多野结衣三级在线| 国产精品无码久久久久成人app| ****av在线网毛片| 欧美日韩性生活| 国产成人精品一区二区三区福利| 国产精品美女www爽爽爽视频| 老司机在线精品视频| 国产精品女主播一区二区三区| 丝瓜av网站精品一区二区| 欧美最近摘花xxxx摘花| 三级黄在线播放| 亚洲一区亚洲二区亚洲三区| 国产乱理伦片a级在线观看| 日韩网站免费观看高清| 首页国产精品| 精品久久久香蕉免费精品视频| 久久久久久无码精品大片| 精品人妻一区二区三区换脸明星| 国内精品麻豆美女在线播放视频| 韩国精品福利一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲| 免费观看成人性生生活片| 无码人妻久久一区二区三区不卡| 日本不卡一二三区| 91popny丨九色丨国产| japan乱配videos老少配| 亚洲久久久久| 亚洲影音一区| 欧美大片在线播放| 国产一区二区三区四区大秀| 久久久久久久久久久91| 色婷婷精品久久二区二区蜜臀av| 国产精品入口芒果| 在线观看中文字幕码| 99热最新网址| 91精品国产自产|