在派生 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.
在节目中:
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.