【发布时间】:2016-08-19 20:53:01
【问题描述】:
#include<bits/stdc++.h>
using namespace std;
class A {
public :
~A(){
cout << " A is destroyed " << endl;
}
};
class B : public A
{
public :
~B(){
cout << " B is destroyed " << endl;
}
};
int main()
{
B obj;
B * p = &obj;
delete p;
return 0;
}
在主函数中,我只创建了 B 类的 一个 对象,它继承了 A 类。 当我使用指针删除该对象时,调用析构函数并打印消息但是,我无法理解为什么析构函数被称为 twice ?
【问题讨论】:
-
你应该发布程序的输出。
-
@BiagioFesta:在这种情况下那将毫无意义。再说了,那些鼻魔怎么贴?
-
您可能也应该在
A中定义一个virtual destructor,尽管我认为这与您当前的问题无关。 -
这是格式错误的代码:尝试
delete指向局部变量的指针是一个非常糟糕的主意。 -
解决此类问题的正确工具是使用调试器,但在这样做之前不要在 Stack Overflow 询问。告诉我们您在逐行检查代码时所做的所有观察。您也可能想阅读How to debug small programs (by Eric Lippert)] 至少给我们留下一个 minimal reproducible example 来重现您的问题。 (这是πάνταῥεῖ™提供的个人股票评论)
标签: c++