析构函数上的虚拟传播

Virtual propagation on destructor

我知道 virtual 传播到派生的 class 方法,并且可以选择将 as 关键字放在派生的 class 的方法声明中,我知道我必须标记作为virtual基class的析构函数,为了多态析构,但我想知道的是如果派生class的默认析构函数,继承virtual 来自基础 class 的虚拟析构函数,所以我必须在派生的 class.

上显式地写它

示例:

class A{
public:
    virtual ~A() override = default;
}
class B: public A{
public:
    // have i to write this or it's already what the compiler get as default?
    virtual ~B() override = default;
}

是,一旦成员函数(包括析构函数)在基础 class 中被标记为 virtual,它在所有派生的 class 中仍然是 virtual

您可以在 ~B() 声明中省略关键字 virtual,如果 ~B() 为空,甚至可以完全省略。

派生 class 的析构函数,尽管其名称与基 class 的析构函数不同, 覆盖 基 class 析构函数。就像任何其他覆盖一样,如果它覆盖的是虚拟的,那么它就是虚拟的。