从C++常见问题解答中:



我意识到这意味着您无法更改返回类型,参数的类型或参数的数量。我可能会在单词的语法上花些功夫,但是有可能覆盖Parent的析构函数吗?

class Child : public Parent {
public:
    virtual Parent::~Parent() {
        // New definition
    }
};

为此,它是否递归执行?
class Grandchild : public Child {
public:
    Child::Parent::~Parent() {
        // An even newer definition
    }
};

我已经读过thisrelated post,这让我觉得因为析构函数不是继承的,所以它们不能被覆盖,但是我从未见过明确声明。

编辑:我更改了此设置以反射(reflect)我要覆盖父级的析构函数的事实,请注意,子级和子级会覆盖〜Parent()。

我这样做的主要原因是在更改销毁方式的同时维护Parent的接口(interface)(子类的全部原因)。我将管理其他所有创建的Parent的东西,并在我选择的稍后时间显式调用其析构函数。

最佳答案



不,您绝对不是–这是两个截然不同的事情。



是的,实际上,您在很多情况下都必须这样做。为了使它适用于多态对象,您需要将基类的析构函数声明为virtual:

Parent const& p = Child();

因为p.~Child()是虚拟的,所以将在范围的末尾正确调用Parent::~Parent

07-24 09:45
查看更多