为什么c++析构函数在继承时被调用2次

Why C++ destructor at inheritance invoked 2 times

本文关键字:调用 2次 继承 c++ 析构函数 为什么      更新时间:2023-10-16

我试过这个代码:

#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;
}

输出:(); B (); B ~ (); ~ (); ~ ();

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

创建临时对象后,将其复制到a(使用切片!),第一次销毁开始。一个临时对象(B();)正在被析构——首先是~B(),然后调用它的父类~A()的析构函数。然后a将超出作用域并触发其析构函数。