析构函数在Application出口处重新运行

时间:2012-06-21 14:04:27

标签: c++ destructor

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

MainClass.h中的

public:
    InterClass *m_pInterClass; 

并在MainClass的构造函数中:

m_pInterClass = new InterClass(this);

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

main()中,一切正常,直到它结束。

我的代码的最后一行是:

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

我的应用程序在“return 0”崩溃 我在我的代码中放置了OutputDebugString()。 我缩小的是: 在DebugView-  我可以看到“InterClass”的析构函数然后执行“退出应用程序”,然后再次执行“InterClass”的析构函数。 我很困惑为什么InterClass的析构函数被执行两次?那到return 0;

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

P.S。我是一名嵌入式C程序员,对C ++完全陌生(他被迫从事PC应用程序:()

1 个答案:

答案 0 :(得分:4)

显然,这种气味不遵守 Rule of Three 您的类 复制构造函数 复制赋值运算符 应该对动态分配的成员指针执行深层复制。如果没有,那么你一定会看到你得到的行为。

无论哪种方式,你应该避免使用原始指针成员。你最好用智能指针包装它。