Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未调用析构函数_C++_Destructor_C++builder Xe2 - Fatal编程技术网

C++ 未调用析构函数

C++ 未调用析构函数,c++,destructor,c++builder-xe2,C++,Destructor,C++builder Xe2,这是我的WinMain方法的摘录。这并不完整,但我认为足以说明问题的核心。请不要问我为什么要在数据模块应该自动删除时显式删除它。这完全是另一个问题(当应用程序初始化过早结束,其中一个构造函数出现异常时,与错误的终止顺序有关) 当我使用delete操作符时,数据模块的析构函数并没有被调用。在程序到达WinMain方法的封闭括号后调用: 你说过 在应该自动删除数据模块时显式删除数据模块 显然,无论设计什么样的代码来自动释放它,它仍然在尝试这样做,幸好它不知道您在完成顺序方面的问题 将指针设置为NUL

这是我的WinMain方法的摘录。这并不完整,但我认为足以说明问题的核心。请不要问我为什么要在数据模块应该自动删除时显式删除它。这完全是另一个问题(当应用程序初始化过早结束,其中一个构造函数出现异常时,与错误的终止顺序有关)

当我使用delete操作符时,数据模块的析构函数并没有被调用。在程序到达WinMain方法的封闭括号后调用:

你说过

在应该自动删除数据模块时显式删除数据模块

显然,无论设计什么样的代码来自动释放它,它仍然在尝试这样做,幸好它不知道您在完成顺序方面的问题


将指针设置为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;    
}