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为虚拟,对吧?为什么我们允许声明这样的析构函数呢?对另一个开发者来说可能有点混乱.
无论您是否声明,覆盖虚拟成员函数的函数始终是虚拟的virtual.因此B::~B(),虚拟永远A::~A()是虚拟的.