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

0 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Bar*_*zKP 5

您创建一个临时对象,它被复制到后a(与切片!)先破坏开始.B();正在破坏临时对象() - 首先调用~B()其父类的析构函数~A().然后a超出范围,它的析构函数会激活.