【发布时间】:2018-06-29 14:10:51
【问题描述】:
我有一个带有虚拟析构函数的基类A。 A 的后代 B 和 C 使用默认析构函数。通过指向A的指针删除C的对象是否安全?
更具体地说,请考虑以下示例代码:
class A {
public:
A(){};
virtual ~A() {/* code here */};
};
class B: public A {
B() {/* code....*/};
/* NO DESTRUCTOR SPECIFIED */
};
class C: public B {/*same as above, no destructor */};
class D: public B {/* same as above, no destructor*/}
要运行的代码如下所示:
A* getAPointer(void); /* a function returning a C or a D*/
A* aptr=getAPointer();
/* aptr is declared as A*, but points to either an object of class C
or class D*/
delete aptr;
delete aptr 安全吗?它做对了吗:如果aptr指向C类的对象,aptr首先调用C的析构函数,然后是B的析构函数,最后是A的析构函数?
【问题讨论】: