【发布时间】:2021-03-27 22:34:55
【问题描述】:
是的,我看过很多关于在 C++ 中使用关键字 virtual 和 override 的析构函数的帖子。我也认为我了解用法:
- 如果基类有虚析构函数,而派生类重写了它,如果签名不同,程序将因重写而无法编译。
但是我想知道 - 或者我在某人的代码中也多次看到它是这样使用的:
class Base
{
public:
~Base();
};
class Derived : public Base
{
public:
~Derived() override;
};
在基类中对非虚函数的析构函数进行覆盖是否实际上对程序/编译或任何东西有任何影响?还是只是在这种情况下使用不当?
【问题讨论】:
-
那不会编译。
-
GCC:
error: 'Derived::~Derived()' marked 'override', but does not override -
什么不会编译?为什么,因为过度“覆盖”?
-
@malajedala 是的,您不必在派生类中重复“virtual”关键字,尽管我建议您这样做(以避免刚刚遇到的那种混淆)。
标签: c++ virtual destructor