c++ - 覆盖析构函数 C++

标签 c++ inheritance overriding destructor multiple-inheritance

来自 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/

相关文章:

c++ - static_pointer_cast<Derived> pReallyABase = static_pointer_cast<Derived>(pBase) 有效!为什么?

java - 在外部类中实现静态嵌套类的接口(interface)

java - 如何将构造函数从父类(super class)继承到子类

java - 实例变量的多态性

c# - 为什么我重写的 Dispose 没有被调用?

c++ - 是否可以使用 C 中的系统 api 启动终止命令?如果没有其他选择?

c++ - 使用 QNmeaPositionInfoSource 类解析 *.nmea 文件返回超时。

c++ - C++中具有相同名称但成员不同的结构

c++ - 有人能帮我弄清楚为什么我的 Do/While 循环不工作吗? (C++)

jquery - Superfish 插件 : $. fn.extend({...}) -- 这段代码是如何工作的?