日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Delphi > 正文

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

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

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

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

var

Obj: TObject;

begin

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

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

  If Obj = nil then        //3.判斷指針是否為空,(這一步往往不成功,因為對象

//被釋放,Delphi也不會自動將對象指針置空)

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

  else

  begin

       Try

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

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

        Except

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

        End;

  end;

end;

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

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

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

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

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

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

function ComponentExists(AComponent: TComponent): Boolean;

begin

  try

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

                         //或者為”AComponent.Name”

    result := True;

  except

    result := False;

  end;

end;

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

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

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

假設(shè)我們有一個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;

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

       Try

Person.Sex;

//或者 Person.FirstName;

//或者 Person.LastName;

result := True; //指針可用

Except

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

end;

   

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

   更多文章

 


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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

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

国产偷国产偷亚洲清高网站| 中文字幕国产亚洲| 国内精品不卡| 91精品婷婷国产综合久久| 欧美在线亚洲一区| 欧美日韩999| 五月天久久比比资源色| 日韩欧美色综合| 日韩专区中文字幕| 91精品xxx在线观看| 亚洲一区在线观看免费| 精品亚洲综合| 欧美日韩久久不卡| 91麻豆视频网站| 中文国产字幕在线观看| 亚洲男人在线| 日韩在线 中文字幕| 亚洲免费福利视频| 亚洲国产福利视频| 日韩久久精品视频| 亚洲精品中文字幕乱码三区| 亚洲女人天堂a在线播放| 久草视频在线看| a天堂中文在线官网在线| 视频一区日韩| 国产高清一区| 国产精品视频福利一区二区| 亚洲视频在线观看日本a| 黄色一级大片在线免费看国产一| 丰满少妇一区二区| 91精品综合久久久久久| 精品日韩av一区二区| 国产视频中文字幕在线观看| 久久久精品欧美| 亚洲一区在线观看免费| www.精品av.com| 在线资源av| 精品播放一区二区| 日韩欧美在线网址| 美女免费视频一区| 亚洲国产欧美日韩在线| www.尤物.com| 日韩欧美色综合| 日韩在线小视频| 福利在线国产| 久久精品日韩无码| 国产91一区| 国产视频1区2区| 久久riav| 亚洲九九精品| 亚洲一级特黄| 午夜影院在线观看欧美| 国产手机精品视频| 成人一区二区不卡免费| 日韩三级视频中文字幕| 91麻豆精品在线| 中文字幕欧美国内| 色偷偷一区二区三区| 色综合久久六月婷婷中文字幕| 日韩三级视频在线播放| 精品在线观看一区| 久久精品网站免费观看| 日韩在线视频一区二区三区| 一区二区三区免费看视频| 一区二区视频免费看| 91精品国产自产观看在线| 伊人国产视频| 国产不卡一区二区在线观看| 国产日韩中文字幕| 日韩高清在线不卡| 精品不卡一区二区| 日韩一级视频在线观看| 快she精品国产999| 亚洲一区三区在线观看| 91精品国产自产在线观看永久∴| 热久久精品国产| 国产欧美日韩视频| 欧美日韩国产免费观看| 国产视频一区三区| 久久精品人妻一区二区三区| 国产一级网站视频在线| 刘玥91精选国产在线观看| 久久久精品网| 91麻豆免费视频网站| 日韩欧美综合在线视频| 日本国产在线视频| 久久婷婷亚洲| 日韩免费视频| 国产亚洲二区| 在线视频第一页| 伊人亚洲视频| 日韩国产亚洲欧美| 亚洲欧美小说国产图片| 日韩 欧美 亚洲| 日韩精品免费观看视频| 久草亚洲一区| 久久精品在线观看| 国产在线播放一区二区| 欧美中文字幕视频| 日韩亚洲国产欧美| 亚洲欧洲日产国码av系列天堂| 精品国产免费视频| 日韩欧美国产亚洲| 国产黄色在线看| 亚洲福利精品| 伊人伊成久久人综合网小说| 在线日韩中文| 日本不卡高清视频一区| 欧美三级日本三级少妇99| 国产午夜精品视频| 国产不卡视频在线| 中文字幕在线中文字幕二区| 97国产视频| 国产日韩中文在线| 亚洲福利一区二区三区| 日韩久久在线| 国产九九在线| 国产精品一区二区三区免费观看| av免费不卡国产观看| 欧美日韩国产片| 国产999在线观看| 在线不卡一区二区| 91精品国产色综合久久不卡蜜臀| 大香一本蕉伊线亚洲网| 一区二区高清在线| 日韩区欧美区| 欧美日韩国产在线观看| 免费看日韩精品| 视频一区二区国产| 九九视频精品免费| 久久久综合精品| 国产成人精品综合久久久| 91久久精品国产91性色69| 77777_亚洲午夜久久多人| 精品久久九九| 亚洲成a人片在线www| 国产九九在线| 国产一级片播放| 在线国产99| 欧美三级日韩在线| 一区二区高清视频| 欧美日韩亚洲91| 成人禁用看黄a在线| 精品日韩av一区二区| 国产黄在线看| 日韩精品视频在线免费观看| av一区在线观看| 久久91精品国产91久久小草| 精品视频在线导航| 激情久久99| 精品久久久视频| 精品999视频| 亚洲欧美小说国产图片| 中文网丁香综合网| 日本国产在线视频| 精品在线99| 日韩.欧美.亚洲| 99久久精品国产亚洲| 日本熟女一区二区| 色屁屁一区二区| 欧美日韩国产中文精品字幕自在自线 | 91精品免费在线观看| 黄污视频在线看| 亚洲福利在线观看| 亚洲最大黄色| 日韩一级免费视频| 中文字幕 欧美日韩| 1区2区3区在线视频| 精品成人久久久| 久久永久免费视频| 91精品国产综合久久精品app| 91久久精品在线| 国产午夜精品久久| 91久久精品国产| 欧美日韩亚洲91| 免费高清特黄a大片| 韩国av一区二区| 亚洲欧美中文字幕在线一区| 中文字幕亚洲区| 日本啊v在线| 中文字幕久精品免费视频| 中文字幕欧美日韩精品| 欧美日韩国产区| 国产日韩在线视频| 色www精品视频在线观看| 伊人www22综合色| 国产婷婷一区二区| 欧美日韩乱国产| 日韩精品三级| 国产在线观看黄色| 国产欧美日韩精品高清二区综合区| 日韩欧美中文在线| 中文字幕亚洲免费| 欧美 中文字幕| 国产一区精品在线| 日韩不卡一二区| 日韩欧美99| 欧美一卡2卡三卡4卡5免费| 午夜国产福利在线观看| 欧美 日韩 国产在线观看| 在线看的av| 日韩精品三级| 久久欧美中文字幕| 国产成人精品999| 中文字幕在线日韩| 亚洲三级免费看| 国产主播中文字幕| 国产免费播放一区二区| 日韩在线视频二区| 九九精品调教| av一卡二卡| 欧美日韩三级一区| 精品国产乱码久久久久久蜜臀| 在线欧美日韩国产| 中文字幕久久av| 欧美1234区| av中文在线播放| 一区二区三区在线播| 99pao成人国产永久免费视频| 中文字幕亚洲二区 | 国产视频1区2区| 日韩高清不卡在线| 在线资源av| 精品福利二区三区| 日韩高清不卡| 日韩精品中文在线观看| 欧美日韩国产一区在线| 国产欧美一级| 91精品国产手机| 亚洲一区在线观看网站| 欧美日韩精品高清| 国产欧美中文字幕| 日韩免费精品视频| 亚洲视频在线观看日本a | 国产视频一二区| 国产黄色片大全| 日韩精品在线播放| 国产99对白在线播放| 欧美在线视频二区| 国产欧美久久久久久久久| 午夜国产欧美理论在线播放| 亚洲一区在线观看网站| 91精品久久久久久久久| 亚洲理论中文字幕| 日韩免费久久| 精品亚洲永久免费| 1区不卡电影| 久久99精品久久久| 日韩一级精品| 中文在线视频观看| 亚洲欧美99| 欧美日韩中文国产| 日韩三级视频中文字幕| 日本国产在线视频| 久久精品夜夜夜夜久久| 精品亚洲成a人片在线观看| 日韩精品视频在线观看视频| 精品久久电影| 国产一级免费在线观看| 欧美日韩成人一区二区| 91欧美日韩麻豆精品| 91精品国产欧美日韩| 欧美日韩国产免费观看| 中文字幕在线中文字幕二区| 国产一级视频| 一区二区精品区| 亚洲福利视频专区| 日韩三级视频中文字幕| 偷窥国产亚洲免费视频| 在线视频不卡一区二区| 在线观看区一区二| 国产裸体歌舞团一区二区| 欧美日韩国产三级| 影音先锋一区二区资源站| 中文精品在线观看| 欧美一卡2卡3卡4卡| 国产视频二区| 白嫩少妇丰满一区二区| 国产一二三视频| 福利一区二区| 国产欧美久久久精品免费| 日韩精品在线私人| 欧洲精品二区| 日韩在线视频一区| 欧美成人vr18sexvr| 亚洲高清视频一区| 国产欧美日韩精品综合| 中文字幕日韩第一页| 日韩久久久精品| 视频一区不卡| 久久精品女人| 一区二区日韩视频| a视频在线播放| 亚洲第一香蕉网| 欧美天堂一区二区| 国产一区精品在线| 一区二区日韩av| 欧美日韩亚洲一区| 天天综合天天综合| 亚洲一区精品在线| 首页国产欧美久久| 91精品婷婷国产综合久久竹菊| 内射国产内射夫妻免费频道| 日韩在线播放一区二区| 国产绿帽一区二区三区| 欧美日韩色综合| 国产字幕中文| www在线播放| 欧美日韩国产亚洲一区| 中文字幕在线观看亚洲| 欧洲精品在线一区| 午夜高潮免费视频| 91精品国产免费| 日韩美女中文字幕| 日韩欧美国产高清| 国产伦精品免费视频| www.尤物.com| 又黄又www的网站| 天天综合色天天| 日韩欧美在线中文字幕| 亚洲永久免费视频| 91精品国产高清91久久久久久| 内射国产内射夫妻免费频道| 日韩欧美综合在线视频| 国产一区久久| 亚洲最新永久观看在线| 欧美日韩亚洲视频| 精品网站999| 国产欧美日韩高清| 国产网站欧美日韩免费精品在线观看| 亚洲成av人片在线| 国产成人日日夜夜| 91精品观看| 欧美性极品xxxx做受| 免费网站看黄yyy222| 国产日韩精品在线看| 国产 日韩 欧美 综合| 欧美在线视频一区二区| 久久激情中文| 亚洲天堂国产视频| 欧美不卡一区二区| 日韩欧美亚洲区| 日韩欧美色综合网站| 中文字幕 亚洲视频| 欧美日韩国产一区在线| 欧美三级网址| 中文字幕欧美日韩在线不卡| 日韩精品视频免费在线观看| 亚洲综合欧美在线| 亚洲美女视频一区| 国产永久免费高清在线观看| 日韩欧美中文在线| 国产成人日日夜夜| 国产v日产∨综合v精品视频| 日韩在线欧美| 日韩欧美中文字幕公布| 日韩高清不卡一区| www.91香蕉视频| 国产免费永久在线观看| 欧美三级视频在线| 国产日韩中文在线| 婷婷中文字幕在线观看| 亚洲黄色一区二区| 精品极品三级久久久久| 日韩欧美国产1| 亚洲午夜av| 91麻豆精品国产91久久久使用方法 | 国产免费一级| 国产欧美日韩在线看| 在线观看一区日韩| 91久久久久久久久| 久久手机免费观看| 精品国产乱码久久久久久牛牛| 美国av一区二区| 91精品视频在线| 日韩精品福利一区二区三区| 亚洲欧洲日韩在线| 国产手机视频一区二区| av免费在线播放| 欧美日韩夫妻久久| 欧美在线观看视频一区| 91精品高清| 日韩精品免费视频一区二区三区| 中文字幕亚洲乱码| 免费在线视频一级不卡| 日本亚洲欧美| 欧美日韩视频网站| 亚洲黄在线观看| 尤物在线精品| 亚洲精品中文字幕乱码三区| 中文字幕精品在线播放| 一区二区视频国产| 在线欧美一级视频| 欧美日韩99| 国产乱码在线观看| 国产激情在线观看| 日韩欧美国产综合| 国产小视频在线| 久久精品免费在线观看| www高清在线视频日韩欧美|