麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

Delphi中對象解除技巧

2019-11-18 17:58:06
字體:
來源:轉載
供稿:網友

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

在Delphi程序設計中,我們需要通過解除建立的所有對象來避免內存泄漏。但是,如果你在程序中不謹慎小心的話,很容易多次解除同一個對象,這將會引起很嚴重的錯誤,造成應用程序崩潰,甚至是死機。

請看下面的程序:


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


  在上例中,當執行到Button3.Free時會產生一個錯誤,因為在調用Button2.Free時,Button2被解除,但因為Button2是Button3的宿主,Button3也同時被解除,因此錯誤就不可避免地發生了。
  要避免上述錯誤,有兩種方法:第一,在解除宿主之前要先解除其所屬的所有組件。這種方法很簡單,只要將上例中Button2.Free和Button3.Free換位即可。第二,在Button3.Free執行之前將Button3變量設置為nil。程序如下:


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


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


上一篇:Delphi的Hint(1)

下一篇:實現Lucas-Kanade光流計算的Delphi類

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

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: av免费av | 欧美a久久 | 欧美18—19sex性hd按摩 | www.com超碰| 亚洲第一成人在线视频 | 美国人成人在线视频 | 免费在线观看亚洲 | 国产精品视频一区二区三区四区国 | www.99re14.com| 久久精品久久精品国产大片 | 激情免费视频 | 中文字幕国产日韩 | 欧美性生交xxxxx久久久缅北 | 日本网站一区 | 久久激情免费视频 | 91一区二区三区久久久久国产乱 | 亚洲精品午夜国产va久久成人 | 日本最新免费二区三区 | 中国杭州少妇xxxx做受 | 久久久久性 | 久久久久久久久久一本门道91 | 免费观看9x视频网站在线观看 | 色偷偷欧美 | 毛片视频播放 | 欧美成人免费电影 | 黄色一级片在线免费观看 | 777zyz色资源站在线观看 | 香蕉久久久精品 | 91精品国产91久久久久久吃药 | 久久久久久久久成人 | 本站只有精品 | 国产成年人小视频 | 国产精品6区 | 久夜草| 91九色丨porny丨国产jk | 特色一级黄色片 | 国产98色在线 | xxxⅹ96日本护士hd | 日本在线国产 | av观看网站 | 欧美中文字幕一区二区 |