从C++常见问题解答中:
我意识到这意味着您无法更改返回类型,参数的类型或参数的数量。我可能会在单词的语法上花些功夫,但是有可能覆盖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)(子类的全部原因)。我将管理其他所有创建的Parent的东西,并在我选择的稍后时间显式调用其析构函数。
最佳答案
不,您绝对不是–这是两个截然不同的事情。
是的,实际上,您在很多情况下都必须这样做。为了使它适用于多态对象,您需要将基类的析构函数声明为virtual
:
Parent const& p = Child();
因为
p.~Child()
是虚拟的,所以将在范围的末尾正确调用Parent::~Parent
。