为什么继承的C ++析构函数被调用了2次

时间:2016-10-10 12:49:38

标签: c++ constructor destructor

我试过这段代码:

#include <iostream>
using namespace std;

class A {
public:
A(){cout<<"A();";}
 ~A(){cout<<"~A();";}
};

class B : public A {
public:
B(){cout<<"B();";}
 ~B(){cout<<"~B();";}
};

int main() {
A a =B();
return 0;
}

输出: A(); B();〜B();〜A();〜A();

为什么A的析构函数被调用了2次?

1 个答案:

答案 0 :(得分:5)

创建临时对象后,将其复制到renderArray()(带slicing!),第一次破坏就开始了。正在销毁临时对象(a) - 首先B();然后调用其父类~B()的析构函数。然后~A()超出范围并且其析构函数触发。