please consider the following
class base{
base();
~base();
}:
class derived : public base{
};
Does a base class destructor is automatically invoked when a derived object is destructed and the derived class has no destructor defined?
Otherwise, if I have a destructor in the derived class too, do I need to call explicitly base class destructor too?
class base{
base();
~base();
}:
class derived : public base{
derived();
~derived
base::~base(); //do I need this?
}
};
The base class destructor is automatically invoked in this case; you do not need to call it.
However, note that when destroying an object through delete
on a base class pointer and the destructor is not virtual
, the result is going to be undefined behavior (although you might not get a crash).
Always declare the destructor as virtual
in any class which is meant to be derived from. If the base class does not need to have a destructor, include a virtual
one anyway with an empty body.
There is an exception to the above rule for an edge case: if your derived classes do not need to support polymorphic destruction, then the destructor does not need to be virtual
. In this case it would be correct to make it protected
instead; more details here, but be advised that this rarely occurs in practice.