我试过这段代码:
#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次?
答案 0 :(得分:5)
创建临时对象后,将其复制到renderArray()
(带slicing!),第一次破坏就开始了。正在销毁临时对象(a
) - 首先B();
然后调用其父类~B()
的析构函数。然后~A()
超出范围并且其析构函数触发。