Need for "Virtual Destructor"
If we have 2 classes, say
class CBase{
public:
CBase(){}
~CBase(){}
};
class CDerived : public CBase{
public:
CDerived(){}
~CDerived(){}
};
and if we do,
CBase* pBase = new CDerived;
delete pBase;
Since CBase does not have a virtual destructor, the delete pBase invokes the destructor of the class of the pointer (CBase::~CBase()), rather than the destructor of the most derived type (CDerived::~CDerived()). And as you can see, this is the wrong thing to do in the above scenario.
A class must have a virtual destructor if it meets both of the following criteria:
- You do a delete pBase.
- pBase actually points to a derived class object.
1 comment:
Its wrong if we think that we need to have "Virtual Destructors" only if we have atleast one virtual function in base class.
As said earlied if the following 2 conditions are true, we need to have a virtual destructor in Base
1. If we delete the base pointer pBase
2. And pBase is pointing to derived class instance.
Post a Comment