Alex Rivera | Logout

Does delete on a pointer to a subclass call the base class destructor?

Asked 2009-03-24T14:30:32.753
169

I have an class A which uses a heap memory allocation for one of its fields. Class A is instantiated and stored as a pointer field in another class (class B.

When I'm done with an object of class B, I call delete, which I assume calls the destructor... But does this call the destructor of class A as well?

Edit:

From the answers, I take that (please edit if incorrect):

  1. delete of an instance of B calls B::~B();
  2. which calls A::~A();
  3. A::~A should explicitly delete all heap-allocated member variables of the A object;
  4. Finally the memory block storing said instance of class B is returned to the heap - when new was used, it first allocated a block of memory on heap, then invoked constructors to initialize it, now after all destructors have been invoked to finalize the object the block where the object resided is returned to the heap.
Edit
Report

1 Answer

6

If you have a usual pointer (A*) then the destructor will not be called (and memory for A instance will not be freed either) unless you do delete explicitly in B's destructor. If you want automatic destruction look at smart pointers like auto_ptr.

answered 2009-03-24T14:34:39.437

Your Answer