-2

我有这一课:说“ 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;

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

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

4

1 回答 1

4

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

无论哪种方式,您都应该避免使用原始指针成员。您最好将其包装在智能指针中。

于 2012-06-21T14:13:46.700 回答