Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么是C++;继承时的析构函数调用了2次_C++_Constructor_Destructor - Fatal编程技术网

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

C++ 为什么是C++;继承时的析构函数调用了2次,c++,constructor,destructor,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

我尝试了以下代码:

#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;
}
#包括
使用名称空间std;
甲级{
公众:

A(){cout创建临时对象后,第一次销毁将开始。临时对象(
B();
)将被销毁-首先是
~B()
,然后是其父类
~A()的析构函数
被调用。然后
a
超出范围,其析构函数被激发。

创建临时对象后,该对象将被复制到
a
(使用!)中,第一次销毁开始。临时对象(
B();
)将被销毁-首先是
~B()
,然后是其父类的析构函数
~a()调用
。然后
a超出范围,其析构函数触发。

您有复制构造函数和切片…您有复制构造函数和切片。。。