c++ - 如果基类析构函数是虚拟的,则派生类的析构函数默认是虚拟的吗?

标签 c++ polymorphism virtual-destructor

我最近在阅读有关虚拟函数和虚拟析构函数的内容,并引起了以下问题。

例如,我有以下继承链。

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

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

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

最佳答案

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

在这个例子中,是的。

一旦某事物被标记为虚拟,该事物的所有重写后代也都是虚拟,无论它们是否明确声明

因此,如果一个方法是虚拟,则覆盖该方法的所有派生方法也是虚拟。如果析构函数是虚拟,则所有派生析构函数也是虚拟

关于c++ - 如果基类析构函数是虚拟的,则派生类的析构函数默认是虚拟的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67842799/

相关文章:

c++ - 为什么 B 类中的 f2 被 D 类中的 f2 覆盖

c++ - 基类邪恶 -

c++ - 对象成员变量还是继承?

c++ - 标量删除析构函数

c++ - 当一个类中有虚函数时,隐式生成的析构函数是否也是虚函数?

c++ - 对齐指针

c++ - 在同一个类的构造函数中调用一个函数是好的编程吗?

c++ - C++ 枚举中的最大值和最小值

c++ - 默认的虚拟析构函数是否会阻止编译器生成的 move 操作?

c++ - 将 protected 析构函数虚拟化是否有用?