Unlike ordinary member functions, a virtual destructor is not overridden when redefined in a derived class. Rather, it is extended: the lower-most destructor first invokes the destructor of its base class and only then, it is executed. Consequently, when you try to declare a pure virtual destructor, you may encounter compilation errors, or worse: a runtime crash. However, there’s no need to despair–you can enjoy both worlds by declaring a pure virtual destructor without a risk. The abstract class should contain a declaration (without a definition) of a pure virtual destructor:
//Interface.h fileclass Interface {public: virtual ~Interface() = 0; //pure virtual destructor declaration};
Somewhere outside the class declaration, the pure virtual destructor has to be defined like this:
//Interface.cpp fileInterface::~Interface() {} //definition of a pure virtual destructor; should always be empty