【发布时间】:2016-11-10 09:32:35
【问题描述】:
class A {
....
};
class B: public A {
int x;
...
};
class C: public A{
A * ptr;
.....
};
class D : public A {
A* ptr1;
A* ptr2;
....
};
注意:我为 B、C、D 制作了所有构造函数,只是没有将它们包含在其中。 所以 A(没有字段)是超类,我有 3 个子类(B、C 和 D),每个子类都有不同的字段。
A 是一个抽象类,它的主要链接是 Class (B,C,D)
所以我可能会遇到类似的情况
B *x = new B {5};
B *x2 = new B {5}
D * y = new D{x,x2);
所以当我做delete y; 时,我想让它链式破坏它的两个字段(B 对象)的 2 个指针。我将如何为 D 类创建析构函数,然后进行链式析构?
就像我展示的示例非常简单,但其他示例的层次越来越多。我想确保所有内容都被删除,以免发生内存泄漏。
我的 D 班 dtor 应该是这个样子吗?
~D(){
delete ptr1;
delete ptr2;
}
对于 C 类的情况,我会这样做吗?
~C(){
delete ptr;
}
因为我这样做了但它不起作用我得到内存泄漏所以有什么问题?
【问题讨论】:
-
你声明你的析构函数是虚拟的吗?
-
对于 A 类没有。我想如果我在子类@Falmarri 中制作它们,我可以覆盖
-
是否应该让 A 类析构函数成为纯虚拟的,我真的不需要对 B 类进行析构,它可以使用它的默认值吗?
-
标准说如果你通过
base指针删除(指向derivedobject),base类应该有virtual析构函数,如果在@987654331中没关系@你正在做一些有用的事情。 -
我点错了答案,this 是您要找的:
标签: c++ subclass destructor superclass