これは私の WinMain メソッドからの抜粋です。完全ではありませんが、問題の核心を説明するには十分だと思います。自動的に削除する必要があるのに、なぜデータ モジュールを明示的に削除するのかを聞かないでください。これはまったく別の問題です (コンストラクターの 1 つを例外として、アプリケーションの初期化が途中で終了した場合のファイナライズの順序が正しくないことに関係しています)。
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 演算子を使用すると、データ モジュールの奇妙なデストラクタが呼び出されません。Is は、プログラムが WinMain メソッドの囲みブレースに到達した後に呼び出されます。