在使用虚拟析构函数从基类派生的最终类中,派生类析构函数是否需要“virtual”关键字?它应该有“final”关键字吗?

exc*_*ado 4 c++ c++17

我有一个带有析构函数和继承者Base的类:virtualfinal Derived

class Base {
public:
  virtual ~Base() { 
    // some impl
  }
};

class Derived final : public Base {
public:
  virtual ~Derived() override {
    // some other impl
  }
};
Run Code Online (Sandbox Code Playgroud)

我有以下问题:

  • 是否~Derived需要virtual说明符?
  • 我应该标记~Derived为吗final

Ben*_*igt 6

  1. ~Derived()无论您是否应用关键字,都将是一个虚拟析构函数。那是因为基类析构函数是虚拟的。

  2. ~Derived()将是最终覆盖者,因为它是标记为 的类的成员finalfinal是否直接在析构函数上使用关键字并不重要。