繁体   English   中英

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

[英]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

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

因此,编译器会自行将结构B的析构函数重新声明为虚拟的,对吗? 那么为什么我们被允许声明这样的析构函数呢? 这可能会使其他开发人员感到困惑。

重写虚成员函数的函数永远是虚拟的,不管你声明virtual与否。 因此B::~B()始终是虚拟的,因为A::~A()是虚拟的。

是。 您的理解是正确的。

那么为什么我们被允许声明这样的析构函数呢?

我同意您的看法,这有点令人困惑,但是您可以通过仅从基类中删除virtual函数来删除所有基类和派生类的函数的虚函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM