国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

Delphi中對(duì)象解除技巧

2019-11-18 17:58:06
字體:
供稿:網(wǎng)友

我的主頁: http://www.tommstudio.com/

在Delphi程序設(shè)計(jì)中,我們需要通過解除建立的所有對(duì)象來避免內(nèi)存泄漏。但是,如果你在程序中不謹(jǐn)慎小心的話,很容易多次解除同一個(gè)對(duì)象,這將會(huì)引起很嚴(yán)重的錯(cuò)誤,造成應(yīng)用程序崩潰,甚至是死機(jī)。

請(qǐng)看下面的程序:


PRocedure TForm1.Button1Click(Sender:TObject);
var
 Button2,Button3:TButton;
begin
   Button2:=TButton.Create(self);
   Button3:=TButton.Create(Button2);
   Button2.Free;
   Button3.Free;
end;


  在上例中,當(dāng)執(zhí)行到Button3.Free時(shí)會(huì)產(chǎn)生一個(gè)錯(cuò)誤,因?yàn)樵谡{(diào)用Button2.Free時(shí),Button2被解除,但因?yàn)锽utton2是Button3的宿主,Button3也同時(shí)被解除,因此錯(cuò)誤就不可避免地發(fā)生了。
  要避免上述錯(cuò)誤,有兩種方法:第一,在解除宿主之前要先解除其所屬的所有組件。這種方法很簡(jiǎn)單,只要將上例中Button2.Free和Button3.Free換位即可。第二,在Button3.Free執(zhí)行之前將Button3變量設(shè)置為nil。程序如下:


Button2.Free;
Button3:=nil;
Button3.Free;


  在上面的程序中,將Button3置為nil是為了阻止應(yīng)用程序重新使用已解除對(duì)象的內(nèi)存。在調(diào)用Free對(duì)象方法時(shí),它會(huì)確定對(duì)象是否為nil,如果不是,F(xiàn)ree對(duì)象方法會(huì)假定對(duì)象仍然存在,使用對(duì)象引用為它分配內(nèi)存,然后調(diào)用Destroy釋放對(duì)象內(nèi)存,并清除任何相關(guān)的虛擬對(duì)象方法的數(shù)據(jù)表格信息。而Destroy對(duì)于有對(duì)象存在的內(nèi)存地址不會(huì)做任何改變,所以如果在調(diào)用Destroy之后測(cè)試該內(nèi)存地址,它仍可能有效。所以當(dāng)在程序中兩次調(diào)用一個(gè)對(duì)象而沒有將對(duì)象引用置為nil時(shí),對(duì)象引用將仍然引用對(duì)象解除之前所占用的內(nèi)存地址,這就是產(chǎn)生錯(cuò)誤的原因。
  當(dāng)然,在實(shí)際開發(fā)過程中,大多數(shù)錯(cuò)誤不會(huì)這樣明顯,解決的方法也要依具體而定,不會(huì)這么簡(jiǎn)單地加一句話就能解決問題。我在這里只是說明一種編程思想,起一個(gè)拋磚引玉的作用,具體的東西還要靠你在實(shí)踐中去探索,積累。


上一篇:Delphi的Hint(1)

下一篇:實(shí)現(xiàn)Lucas-Kanade光流計(jì)算的Delphi類

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

新聞熱點(diǎn)

疑難解答

圖片精選

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

主站蜘蛛池模板: 高雄县| 错那县| 陵水| 方山县| 三明市| 叙永县| 新河县| 佳木斯市| 岑溪市| 太白县| 牙克石市| 谢通门县| 佛坪县| 射洪县| 玛纳斯县| 尼玛县| 安阳市| 通州市| 库尔勒市| 江北区| 舞阳县| 陇西县| 怀远县| 镇康县| 郧西县| 开阳县| 迁安市| 微山县| 津市市| 区。| 太原市| 徐州市| 池州市| 忻城县| 蒲城县| 项城市| 五家渠市| 威信县| 新昌县| 曲阳县| 大渡口区|