Alex Rivera | Logout

Why do we need a pure virtual destructor in C++?

Asked 2009-08-02T19:27:29.177
207

I understand the need for a virtual destructor. But why do we need a pure virtual destructor? In one of the C++ articles, the author has mentioned that we use pure virtual destructor when we want to make a class abstract.

But we can make a class abstract by making any of the member functions as pure virtual.

So my questions are

  1. When do we really make a destructor pure virtual? Can anybody give a good real time example?

  2. When we are creating abstract classes is it a good practice to make the destructor also pure virtual? If yes..then why?

Edit
Report

1 Answer

29

If you want to create an abstract base class:

  • that can't be instantiated (yep, this is redundant with the term "abstract"!)
  • but needs virtual destructor behavior (you intend to carry around pointers to the ABC rather than pointers to the derived types, and delete through them)
  • but does not need any other virtual dispatch behavior for other methods (maybe there are no other methods? consider a simple protected "resource" container that needs a constructors/destructor/assignment but not much else)

...it's easiest to make the class abstract by making the destructor pure virtual and providing a definition (method body) for it.

For our hypothetical ABC:

You guarantee that it cannot be instantiated (even internal to the class itself, this is why private constructors may not be enough), you get the virtual behavior you want for the destructor, and you do not have to find and tag another method that doesn't need virtual dispatch as "virtual".

answered 2009-08-02T20:14:25.243

Your Answer