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

Is it safe to declare non-virtual destructor in the derived class

在节目中:

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

struct B : A
{
    ~B(){ }
};
int main(){ }

标准N4296::12.4/9:

If a class has a base class with a virtual destructor, its destructor (whether user- or implicitly-declared) is virtual.

所以,编译器会重新声明结构 B 中的析构函数为它自己的虚拟,对吗?那为什么我们被允许声明这样一个析构函数呢?这可能会让其他开发者感到困惑。

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

是的。你的理解是对的。

Why are we permitted to declare such a destructor then?

我同意你的看法,它有点混乱,但是你可以通过从基 class.