#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "A ctor" << endl;
}
virtual ~A()
{
cout << "A dtor" << endl;
}
virtual void foo() = 0;
};
class B : public A
{
public:
B()
{
cout << "B ctor" << endl;
}
virtual ~B()
{
cout << "B dtor" << endl;
}
virtual void foo()
{
cout <<"B's foo" << endl;
}
};
class C : public A
{
public:
C() {
cout << "C ctor" << endl;
}
virtual ~C()
{
cout << "C dtor" << endl;
}
virtual void foo() {cout << "C's foo" << endl;
}
};
int main ()
{
C *ptr = new C[1];
B b;
return 0;
}
这给出了以下输出:
一个人
C ctor
一个人
B ctor
B dtor
一个dtor
我不明白为什么会这样。例如,我知道正在创建一个新的C对象,它是从A派生的,因此A ctor首先运行。然后C ctor运行。然后我认为C dtor运行,但由于某种原因,A ctor再次运行。
答案 0 :(得分:7)
永远不会删除C,因此它会被泄露,并且永远不会调用析构函数。