當前位置:編程學習大全網 - 源碼下載 - Delphi源代碼集

Delphi源代碼集

銷毀、釋放、自由、無和釋放的用法和區別

1)銷毀:虛擬方法

釋放內存,在Tobject中聲明為virtual,通常在其子類中重寫,並添加inherited關鍵字,保證正確銷毀派生類對象;

但是destroy不能直接使用。為什麽?

如果我們在壹個對象為空的時候仍然調用destroy,就會出錯。因為destroy是壹個虛方法,它需要根據對象中的前四個字節找到虛方法表Vmt的入口地址,才能找到destroy的入口地址,所以這個時候對象肯定是存在的。但是free是壹個靜態方法,只需要根據對象引用/指針的類型來確定,即使對象本身不存在,free中也有壹個判斷對象是否存在的操作,所以用free比destroy更安全。

2)免費:靜態方法

測試對象是否為nil,不為nil則調用destroy。以下是免費的Delphi代碼:

程序到對象。免費;

開始

如果Self & lt& gt那就零吧

破壞;

結束;

取長補短,真是太好了!

但是調用對象的Destroy只是銷毀對象,並沒有將對象的引用設置為nil,這需要程序員來完成,但是從Delphi5開始,sysUtils單元中已經提供了壹個freeAndNil。

3)freeAndNil;壹般方法、非對象方法和非類方法。

過程FreeAndNil(var Obj);

定義變量

temp:to object;

開始

temp:= to object(Obj);

指針(Obj):= nil;

在…之時免費;

結束;

建議您使用它而不是free/Destroy來確保正確釋放對象。

4)發布;TcustomForm中定義的靜態方法。

當處理完窗口中的所有事件後,調用free函數。它經常被用來銷毀壹個窗口,當這個窗口中的事件處理需要壹些時間的時候,這個方法可以保證窗口在事件處理之後被銷毀。下面是TCustomForm的Delphi源代碼。發布:

過程TCustomForm。釋放;

開始

PostMessage(Handle,CM_RELEASE,0,0);

//將CM_RELEASE消息發送到窗口消息隊列中。當所有窗口事件消息都被處理後,

//再次調用CM_RELEASE消息處理過程CMRelease。

結束;

讓我們來看看CM_RELEASE消息處理過程的如下定義:

過程CMRelease(var消息:t Message);消息CM _ RELEASE

過程TCustomForm。CMRelease

開始

免費;//終於自由了;

結束;

  • 上一篇:上海有什麽地方比較好玩?
  • 下一篇:我的壹個ts文件為什麽有時播放是6分鐘,有時播放是14分鐘呢
  • copyright 2024編程學習大全網