Top*_*sic 2 c++ oop object virtual-destructor
我有一个三级深度的类层次结构,如下所示:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,我想知道当我呼叫foo()一个物体时会发生什么C.难道要删除整个对象或仅B与A对象的一部分,并保留C在内存中还是部分?
是要删除整个对象还是只删除对象的B和A部分,并将C部分留在内存中?
不会.它将"做正确的事"(即,删除最派生的子对象,运行其所有的析构函数等)提供A(即指针指针的静态类型delete)具有虚拟析构函数(如果class A有一个虚拟的析构函数,它的所有后代都有它.这也适用于多重继承.