【发布时间】:2012-12-20 10:06:39
【问题描述】:
我有一个三层深的类层次结构,如下所示:
class A {
public:
virtual ~A() {}
}
class B : public A {
public:
virtual ~B() {}
void foo(E *e) {
e->remove(this);
}
}
class C : public B {
public:
~C() {}
}
class E {
public:
void remove(A *a) {
delete a;
}
}
好吧,我想知道的是,当我在 C 的对象上调用 foo() 时会发生什么。是要删除整个对象还是只删除对象的B 和A 部分,而将C 部分留在内存中?
【问题讨论】:
-
您有语法错误。请修复它们。另外,避免像瘟疫一样避免
delete this。另外,void remove(A* a)在class E中,但void remove(E* e)在class B中?你确定吗?哎呀! -
你正在销毁所有对象,并释放它的内存。
-
您的代码中有 2 个删除项。哪一个?
-
析构函数的虚拟性是遗传的。
-
在删除 A 后尝试访问 B 类实例的方法是另一种检查方法。
标签: c++ oop object virtual-destructor