如果基类析构函数是虚拟的,那么派生类的析构函数是否默认为虚拟?

问题描述

我最近在阅读有关虚函数和虚析构函数的文章,提出了以下问题。

例如,我有以下继承链。

class Base
{
public:
    virtual ~Base() // note: virtual
    {
        std::cout << "Calling ~Base()\n";
    }
};
 
class Derived: public Base
{
 
public:
 
    ~Derived() 
    {
        std::cout << "Calling ~Derived()\n";
    }
};

我读到基类的虚函数在派生类中默认为隐式虚函数。所以,我认为这同样适用于析构函数。

我想知道,派生类的析构函数是否默认是虚拟的。如果没有,如果您提供一些解释,我会很高兴。

解决方法

我认为这同样适用于析构函数

确实如此,是的。

我想知道,派生类的析构函数是否默认为virtual

在这个例子中,是的。

一旦某事物被标记为 virtual,该事物的所有覆盖后代也都是 virtual,无论它们是否明确声明。

所以,如果一个方法是 virtual,所有覆盖它的派生方法也是 virtual。如果析构函数是 virtual,则所有派生的析构函数也是 virtual

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...