来自C++ FAQ:
[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,而且会在稍后选择的时间显式地调用它们的析构函数。