c++子类继承父类时为啥析构函数执行了2次

以下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();
}

执行结果如下:

img

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的析构函数

这就清楚了吧