I have a base class A
with a virtual destructor. A
has descendants B
and C
which use the default destructor. Is it safe to delete an object of C
through a pointer to A
?
More specifically, consider this sample code:
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*/}
The code to be run looks something like this:
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;
Is the delete aptr
safe? Does it do the right thing: if aptr
points to an object of class C
, the aptr
first calls C
's destructor, then B
's destructor, and finally A
's destructor ?