Powered by |
Why do I need a virtual destructor?A virtual destructor is an essential entity if you use inheritance. Virtual destructor is declared in a base class. It guarantees that for all classes derived from the base class all destructors: 1) will be called and 2) will be called in proper order. It makes available a polymorphic behavior. Take a look at the snippet below: #include "stdio.h"
class BaseClass
{
int id;
public:
BaseClass() { printf("BaseClass()\n"); }
virtual ~BaseClass() { printf("~BaseClass()\n"); } // !!!
};
class Class1 : public BaseClass
{
int id;
public:
Class1() { printf("Class1()\n"); }
~Class1() { printf("~Class1()\n"); }
};
class Class2 : public Class1
{
int id;
public:
Class2() { printf("Class2()\n"); }
~Class2() { printf("~Class2()\n"); }
};
int main(int argc, char* argv[])
{
BaseClass *p = new Class2;
delete p;
return 0;
}
The output in case without virtual destructor is: BaseClass() Class1() Class2() ~BaseClass() But the output in case with virtual destructor differs: BaseClass() Class1() Class2() ~Class2() ~Class1() ~BaseClass() Now you see what happens if destructor should call
|