析构函数是最终的吗? C++标准允许析构函数被声明为最终< /代码>吗?像这样: class Derived: public Base { ... virtual ~Derived() final; }

析构函数是最终的吗? C++标准允许析构函数被声明为最终< /代码>吗?像这样: class Derived: public Base { ... virtual ~Derived() final; },c++,c++11,inheritance,destructor,C++,C++11,Inheritance,Destructor,如果是,这是否会阻止派生类的声明: class FurtherDerived: public Derived {// allowed? } 如果允许,编译器是否可能发出警告?将析构函数声明为final是否是一种可行的习惯用法,用于指示类不打算用作基类 (只有一个派生类。) < P>可以将C++析构函数声明为最终< /代码>? 对 如果是,这是否会阻止派生类的声明: class FurtherDerived: public Derived {// allowed? } 是的,因为派生类

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

 class FurtherDerived: public Derived {// allowed?
 }
如果允许,编译器是否可能发出警告?将析构函数声明为
final
是否是一种可行的习惯用法,用于指示类不打算用作基类

(只有一个派生类。)

< P>可以将C++析构函数声明为<代码>最终< /代码>? 对

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

 class FurtherDerived: public Derived {// allowed?
 }
是的,因为派生类必须声明析构函数(由您显式声明或由编译器隐式声明),并且该析构函数将重写声明的
final
,该函数的格式不正确

规则是:

如果某个B类中的虚拟函数
f
标记为virt说明符
final
,而在从B类派生的D类中,则为函数
D​::​f
覆盖
B​::​f
,程序格式不正确

推导本身格式不正确,不必使用

将析构函数声明为final是否是一种可行的习惯用法,用于指示类不打算用作基类


有效,但您应该只标记类
final
。这是相当明确的一点

表示一个类不打算用作基类的习惯用法是使该类成为final。如果您打算表示一个类不适合作为继承自,您只需将整个类标记为final即可
class Device final:public Base
“…但是您应该只标记类
final
”。和。