来自 C++ 常见问题解答:
[11.4] Can I overload the destructor for my class? No.
我意识到这意味着您不能更改返回类型、参数类型或参数数量。我可能对单词的语法有分歧,但是否有可能覆盖 Parent 的析构函数?
class Child : public Parent {
public:
virtual Parent::~Parent() {
// New definition
}
};
就此而言,递归执行吗?
class Grandchild : public Child {
public:
Child::Parent::~Parent() {
// An even newer definition
}
};
我读过 this和一个 related post这让我想到因为析构函数不是继承的,所以它们不能被覆盖,但我从未看到它被明确说明。
编辑:我改变了这个以反射(reflect)我想覆盖父级的析构函数的事实,注意子级和孙级覆盖 ~Parent()。
我这样做的主要原因是为了维护Parent的接口(interface),同时改变它的销毁方式(子类的全部原因)。我将用其他方法管理所有已创建的父对象,并在我选择的稍后时间显式调用它们的析构函数。
最佳答案
I may be splitting hairs on the syntax of the words
不,你绝对不是——这是两件截然不同的事情。
but is it possible to override the destructor?
是的,事实上在很多情况下您必须这样做。为了使其适用于多态对象,您需要将基类析构函数声明为 virtual
,但是:
Parent const& p = Child();
将在范围末尾正确调用 p.~Child()
,因为 Parent::~Parent
是虚拟的。
关于c++ - 覆盖析构函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17093474/