在派生类中声明非虚拟析构函数是否安全

1 c++ inheritance destructor virtual-functions

在该计划中:

struct A
{
    virtual ~A(){ }
};

struct B : A
{
    ~B(){ }
};
int main(){ }
Run Code Online (Sandbox Code Playgroud)

标准N4296::12.4/9:

如果类具有带虚拟析构函数的基类,则其析构函数(无论是用户还是隐式声明)都是虚拟的.

因此,编译器会将结构中的析构函数重新声明B为虚拟,对吧?为什么我们允许声明这样的析构函数呢?对另一个开发者来说可能有点混乱.

tim*_*rau 5

无论您是否声明,覆盖虚拟成员函数的函数始终是虚拟的virtual.因此B::~B(),虚拟永远A::~A()是虚拟的.

  • @DmitryBundin:您已经在问题中引用了标准中的相关句子.目前还不清楚你还在寻找什么. (3认同)