C++ 未调用析构函数
这是我的WinMain方法的摘录。这并不完整,但我认为足以说明问题的核心。请不要问我为什么要在数据模块应该自动删除时显式删除它。这完全是另一个问题(当应用程序初始化过早结束,其中一个构造函数出现异常时,与错误的终止顺序有关) 当我使用delete操作符时,数据模块的析构函数并没有被调用。在程序到达WinMain方法的封闭括号后调用: 你说过 在应该自动删除数据模块时显式删除数据模块 显然,无论设计什么样的代码来自动释放它,它仍然在尝试这样做,幸好它不知道您在完成顺序方面的问题C++ 未调用析构函数,c++,destructor,c++builder-xe2,C++,Destructor,C++builder Xe2,这是我的WinMain方法的摘录。这并不完整,但我认为足以说明问题的核心。请不要问我为什么要在数据模块应该自动删除时显式删除它。这完全是另一个问题(当应用程序初始化过早结束,其中一个构造函数出现异常时,与错误的终止顺序有关) 当我使用delete操作符时,数据模块的析构函数并没有被调用。在程序到达WinMain方法的封闭括号后调用: 你说过 在应该自动删除数据模块时显式删除数据模块 显然,无论设计什么样的代码来自动释放它,它仍然在尝试这样做,幸好它不知道您在完成顺序方面的问题 将指针设置为NUL
将指针设置为NULL并不意味着在退出时要清理的对象列表中没有指针副本。这是您真正的代码吗?基类是否有虚拟析构函数?是的TDataModule(Delphi类)有虚拟析构函数。但我认为这无关紧要,因为我们声明了指向派生类的指针。这不重要,因为它不会通过指向基类的指针被删除。当您调用
delete
时,您如何确定析构函数没有(也)被调用?@Agentlien:程序执行不会在屏幕截图上看到的断点处停止。
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;
}