2012-12-07 97 views
0

這是我的WinMain方法的摘錄。它不完整,但我認爲這足以說明問題的核心。請不要問爲什麼我應該自動完成刪除數據模塊。這完全是另一個問題(當應用程序初始化過早結束而在其中一個構造函數中異常結束時,會產生不正確的結束順序)。未調用的析構函數

extern PACKAGE TDataModule_Local *DataModule_Local; 

class TDataModule_Local : 
    public TDataModule 
{ 
... 
public: 
    __fastcall  TDataModule_Local(TComponent *Owner); 
    __fastcall  ~TDataModule_Local(); 
} 

WINAPI wWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) 
{ 
    Application->Initialize(); 
    Application->CreateForm(__classid(TMainForm), &MainForm); 
    Application->CreateForm(__classid(TDataModule_Local), &DataModule_Local);  
    Application->Run();  

    if (DataModule_Local != NULL) 
    { 
     delete DataModule_Local;  // destructor not called! why? 
     DataModule_Local = NULL; 
    } 

    return 0;  
} 

當我使用delete操作符時,不會調用數據模塊的怪異析構函數。被稱爲程序達到的WinMain方法的封閉括號後:

enter image description here

+0

這是你的真實密碼?基類是否具有虛擬析構函數? – Vyktor

+0

是的TDataModule(一個Delphi類)具有虛擬析構函數。但我認爲它是無關緊要的,因爲我們聲明瞭派生類的指針。 – truthseeker

+0

這應該不重要,因爲它沒有通過指向基類的指針被刪除。 – jcoder

回答

1

你說

刪除數據模塊明確時,應該自動完成

顯然任何代碼的設計自動釋放它仍然在試圖這樣做,對最終訂單的問題不瞭解。

僅僅因爲你已經將指針設置爲NULL,並不意味着沒有指針坐在要退出時清理的對象列表中。

相關問題