破坏者可能是最终的吗?

Rae*_*ald 38 c++ inheritance destructor c++11

C++标准是否允许将析构函数声明为final?像这样:

 class Derived: public Base
 {
      ...
      virtual ~Derived() final;
 }
Run Code Online (Sandbox Code Playgroud)

如果是这样,那是否会阻止派生类的声明:

 class FurtherDerived: public Derived {// allowed?
 }
Run Code Online (Sandbox Code Playgroud)

如果允许的,是一个编译器可能会发出警告?声明析构函数是final一个可行的习惯用法,用于表明某个类不打算用作基类?

(在最终的基类中,没有必要这样做,只有派生类.)

Bar*_*rry 58

可以将C++析构函数声明为final

是.

如果是这样,那是否会阻止派生类的声明:

是的,因为派生类必须声明析构函数(由您明确地或由编译器隐式地),并且析构函数将覆盖声明的函数final,该函数是格式错误的.

规则是[class.virtual]/4:

如果f某个类B中的虚函数使用virt-specifier 标记,final并且在从B派生的类D中使用函数D?::?f覆盖B?::?f,则该程序格式错误.

它的衍生本身是不正确的,不必使用它.

声明析构函数是最终的可行成语,用于指示某个类不打算用作基类?

实际上,你应该只标记课程final.它更加明确.

  • "......但你应该只标记"最终`类".并且[两者都是多余的](/sf/ask/3059333861/). (13认同)