以下c++代码中,B继承了A类,为啥A的 析构
函数会执行2次, 而A的 构造
函数只执行了一次?
按理说构造函数执行一次就应该是创建了一个对象,一个对象释放了2次就不能理解了,这是为啥?
// A
class A {
public:
A(){
std::cout <<"A的构造函数--" << std::endl;
}
~A() {
std::cout <<"A的析构函数" << std::endl;
}
};
class B : public A {
public :
B(){
std::cout <<"B的构造函数--" << std::endl;
}
~B() {
std::cout <<"B的析构函数" << std::endl;
}
};
int main() {
A a = B();
}
执行结果如下:
B()创建了一个临时对象,然后通过A a = 进行了隐式类型转换
所以说这里其实创建了2个对象
之所以构造函数少一次,是因为你拷贝构造函数没有写
#include <iostream>
using namespace std;
// A
class A {
public:
A(const A &a)
{
std::cout <<"A的构造函数----" << std::endl;
}
A(){
std::cout <<"A的构造函数--" << std::endl;
}
~A() {
std::cout <<"A的析构函数" << std::endl;
}
};
class B : public A {
public :
B(){
std::cout <<"B的构造函数--" << std::endl;
}
~B() {
std::cout <<"B的析构函数" << std::endl;
}
};
int main() {
A a = B();
}
A的构造函数--
B的构造函数--
A的构造函数----
B的析构函数
A的析构函数
A的析构函数
这就清楚了吧