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方法的封閉括號後:
這是你的真實密碼?基類是否具有虛擬析構函數? – Vyktor
是的TDataModule(一個Delphi類)具有虛擬析構函數。但我認爲它是無關緊要的,因爲我們聲明瞭派生類的指針。 – truthseeker
這應該不重要,因爲它沒有通過指向基類的指針被刪除。 – jcoder