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
開始
免費;//終於自由了;
結束;