为什么c++析构函数在继承时被调用2次
Why C++ destructor at inheritance invoked 2 times
我试过这个代码:
#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
将超出作用域并触发其析构函数。
相关文章:
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么 zlib 放气初始化调用一次不起作用?
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 什么是仅调用一次并调用参数的控制台应用
- C++析构函数调用两次,堆栈分配的复合对象
- 谷歌基准测试,如何只调用一次代码?
- 对于优化级别为 0 的 std::vector,析构函数被调用两次
- Singleton模式中的手动析构函数调用:调用多次
- Android JNI RegisterNatives:对所有内容调用一次,或者每个函数调用一次
- 为什么这个自定义分配器的析构函数在 GCC/MSVS 的 stdlib 中被调用两次
- 系统调用:一次和多次,哪个更好?
- 重载运算符 new(),为什么构造函数被调用两次?
- 当 reset() 被unique_ptr调用两次时会发生什么?
- CEdit 框的NM_KILLFOCUS被调用两次
- C++菱形问题 - 如何仅调用一次基方法
- 为什么这个构造函数被调用两次
- 析构函数在与 STL 的共享指针中调用两次
- 函数被多次执行,同时调用一次
- 为什么当我创建 N 个对象的向量时不调用 N 次 CTOR
- 为什么我的析构函数被调用多次