从 C++ 常见问题解答:
[11.4] 我可以为我的班级重载析构函数吗?不。
我意识到这意味着您不能更改返回类型、参数的类型或参数的数量。我可能会对单词的语法感到困惑,但是是否可以 覆盖 父级的析构函数?
class Child : public Parent {
public:
virtual Parent::~Parent() {
// New definition
}
};
就此而言,它是递归的吗?
class Grandchild : public Child {
public:
Child::Parent::~Parent() {
// An even newer definition
}
};
我已经阅读了 这篇 文章和一篇 相关文章,这让我觉得因为析构函数不是继承的,它们不能被覆盖,但我从未见过它明确说明。
编辑:我改变了这个以反映我想覆盖父析构函数的事实,注意孩子和孙子覆盖〜Parent()。
我这样做的主要原因是为了维护 Parent 的接口,同时改变它的销毁方式(子类的全部原因)。我将有其他东西来管理所有 Parent 的创建,并在我选择的稍后时间显式调用它们的析构函数。
原文由 Danny A 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,你绝对不是——这是两件截然不同的事情。
是的,事实上在很多情况下你 必须 这样做。为了使它适用于多态对象,您需要将基类析构函数声明为
virtual
,但是:将在范围末尾正确调用
p.~Child()
因为Parent::~Parent
是虚拟的。