Virtual Destructor in C++

Deleting a derived class object using a pointer to a base class, the base class should be defined with a virtual destructor.

Example Code

using namespace std;
class b {
      b() {
         cout<<"Constructing base \n";
      virtual ~b() {
         cout<<"Destructing base \n";
class d: public b {
      d() {
         cout<<"Constructing derived \n";
      ~d() {
         cout<<"Destructing derived \n";
int main(void) {
   d *derived = new d();
   b *bptr = derived;
   delete bptr;
   return 0;


Constructing base
Constructing derived
Destructing derived
Destructing base