如果基 class 析构函数是虚拟的,派生的 class 的析构函数是否默认是虚拟的?

Is the destructor of a derived class virtual by-default if the base class destructor is virtual?

最近在看虚函数和虚析构函数,引起了下面的疑问。

例如,我有以下继承链。

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

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

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

I thought that the same would apply to the destructors

确实如此,是的。

I would like to know, if the destructor of the derived class is virtual by-default

在这个例子中,是的。

一旦某个东西被标记 virtual,那个东西的所有覆盖后代也都是 virtual,无论他们是否明确地声明它。

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