提问人:Raedwald 提问时间:11/29/2017 最后编辑:Raedwald 更新时间:11/30/2017 访问量:6499
析构函数可能是最终的吗?
May a destructor be final?
问:
C++ 标准是否允许将析构函数声明为 ?喜欢这个:final
class Derived: public Base
{
...
virtual ~Derived() final;
}
如果是这样,这是否会阻止派生类的声明:
class FurtherDerived: public Derived {// allowed?
}
如果允许,编译器是否有可能发出警告?声明析构函数是否是一个可行的习惯用语,用于指示类不打算用作基类?final
(在终极基类中执行此操作没有意义,而只是在派生类中执行此操作。
答:
64赞
Barry
11/29/2017
#1
C++析构函数可以声明为吗?
final
是的。
如果是这样,这是否阻止了派生类的声明:
是的,因为派生类必须声明一个析构函数(由您显式声明或由编译器隐式声明),并且该析构函数将覆盖声明的函数,该函数格式不正确。final
规则为 [class.virtual]/4:
如果某个类 B 中的虚函数用 virt-specifier 标记,而在派生自 B 的类 D 中,函数会覆盖,则程序的格式不正确。
f
final
D::f
B::f
是推导本身格式不正确,它不必被使用。
将析构函数声明为 final 是否是一个可行的习惯用语,用于指示类不打算用作基类?
有效,但您应该只标记类.这要明确得多。final
评论
final
class Devired final : public Base