C++ - What is a virtual destructor?

A base class destructor must be declared virtual, in order for the derived class destructor to be called when the object is deleted through a base class pointer.


Stroustrup recommends declaring a destructor virtual whenever the (base) class has at least one virtual function.
"Having virtual functions indicate that a class is meant to act as an interface to derived classes, and when it is, an object of a derived class may be destroyed through a pointer to the base."

A virtual destructor example:


  // deleting through a base class pointer
  int main()
  {
      CDog* pDog = new CDomesticDog();
      delete pDog;
  
      return 0;
  }
  

  // base class CDog
  class CDog {
  public:
      virtual ~CDog() { // virtual destructor (must be declared virtual in base class).
      }
  };
  

  // derived class CDomesticDog
  class CDomesticDog : public CDog {
      char* m_pData;
  
  public:
      CDomesticDog() {
          m_pData = new char[128] { };
      }
  
      ~CDomesticDog() override { // derived class destructor will be called. resources will be freed. override is optional but recommended.
          delete m_pData;
      }
  };
  

Ads by Google


Ask a question, send a comment, or report a problem - click here to contact me.

© Richard McGrath