One of the common C++ interview question is what is virtual
destructor? Or what is the use of virtual destructor?
You are assigning a derived class object to a base class pointer
and deleting the base class pointer.
If the base class destructor is not declared as virtual,
then derived class destructor won’t get called.
If you are deleting some variables allocated heap memory in
derived class destructor, then it will cause memory leak.
// CPPSamples.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; class Base { public: Base() { cout<<"\n Base class Constructor\r\n"; } ~Base() { cout<<"\n Base class Destructor\r\n"; } }; class Derived:Base { public: Derived() { cout<<"\n Derived class Constructor\r\n"; } ~Derived() { cout<<"\n Derived class Destructor\r\n"; } }; int _tmain(int argc, _TCHAR* argv[]) { Base *ptr=(Base*)new Derived(); delete ptr; getch(); return 0; }
If the base class Destructor is virtual then,
// CPPSamples.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; class Base { public: Base() { cout<<"\n Base class Constructor\r\n"; } virtual ~Base() { cout<<"\n Base class Destructor\r\n"; } }; class Derived:Base { public: Derived() { cout<<"\n Derived class Constructor\r\n"; } ~Derived() { cout<<"\n Derived class Destructor\r\n"; } }; int _tmain(int argc, _TCHAR* argv[]) { Base *ptr=(Base*)new Derived(); delete ptr; getch(); return 0; }