我有这一课:说“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应用程序:()
答案 0 :(得分:4)
显然,这种气味不遵守 Rule of Three 您的类 复制构造函数 和 复制赋值运算符 应该对动态分配的成员指针执行深层复制。如果没有,那么你一定会看到你得到的行为。
无论哪种方式,你应该避免使用原始指针成员。你最好用智能指针包装它。