构造函数、析构函数、重载的 =operator 函数、复制构造函数不会被继承。这到底是什么意思?

Constructor, destructor, overloaded =operator function, copy constructor do not get inherited. What this exactly means?

代码

#include<iostream>
struct A
{
    ~A()
    {
        std::cout<<"dctorA\n";
    }
};
struct B: public A
{
    ~B()
    {
        std::cout<<"dctorB\n";
    }
};

int main()
{
    B b1;
    b1.~A();
}

输出

dctorA
dctorB
dctorA

如果析构函数没有继承,那么我如何通过 B 的对象调用它?

我知道三和五规则,但编译器的工作取决于是否遵循规则。所以为了避免复杂性,我避免编写复制构造函数和重载=运算符。

该语句试图说明的是,当您添加 A::A(int) 时,class B 不会自动获得构造函数 B::B(int)。同样,当您有 A::operator=(int).

时,不会自动生成 B::operator=(int)

可以自动生成复制构造函数B::B(B const&),在这种情况下需要A::A(A const&)。但是你从参数中看到它是生成的,而不是继承为 B::B(A const&).

析构函数的工作方式相同 - 生成,而不是继承 - 但由于没有参数,因此不那么明显。