Kevin Kevin - 2 months ago 6x
C++ Question

Why should I declare a virtual destructor for an abstract class in C++?

I know it is a good practice to declare virtual destructors for base classes in C++, but is it always important to declare

destructors even for abstract classes that function as interfaces? Please provide some reasons and examples why.


It's even more important for an interface. Any user of your class will probably hold a pointer to the interface, not a pointer to the concrete implementation. When they come to delete it, if the destructor is non-virtual, they will call the interface's destructor (or the compiler-provided default, if you didn't specify one), not the derived class's destructor. Instant memory leak.

For example

class Interface
   virtual void doSomething(void) = 0;

class Derived : public Interface
      // Do some important cleanup...

void myFunc(void)
   Interface* p = new Derived();
   // The behaviour of the next line is undefined. It probably 
   // calls Interface::~Interface, not Derived::~Derived
   delete p;