析构函数在应用程序出口处重新运行

Destructor is re-running at Application exit

本文关键字:重新运行 出口处 应用程序 析构函数      更新时间:2023-10-16

我有一个类:说" InterClass "。这个类在MainClass中声明为:

MainClass.h

public:
    InterClass *m_pInterClass; 

在主类的构造函数中:

m_pInterClass = new InterClass(this);

我想在InterClass中使用MainClass的一些函数,所以在构造函数中传递this。我将其分配给一个全局指针,并在课堂上的任何地方使用它。

main()一切都很好,直到它到达终点。

我的代码的最后一行是:

delete MainClass;
OutputDebugString("Exiting Application");
return 0;

我的应用程序在" return 0"崩溃我把 OutputDebugString() 放在代码中的任何位置。我缩小的是:在调试视图上- 我可以看到"类间"的析构函数被执行,然后"退出应用程序",然后再次执行"类间"的析构函数。我很困惑为什么 InterClass 的析构函数被执行两次?那在return 0;

由于此应用程序的性质,我无法在此应用程序中放置断点。

附言我是一名嵌入式C程序员,对C++完全陌生(被迫从事PC应用程序:(工作)

显然,这闻起来像是不遵守三法则
类 Copy 构造函数Copy 赋值运算符应执行动态分配的成员指针的深层复制。如果没有,那么您一定会看到您得到的行为。

无论哪种方式,都应避免使用原始指针成员。你最好把它包裹在一个智能指针中。