Deleting a derived object via a pointer to a base class that doesnt have a virtual destructor.
suggest changeclass base { };
class derived: public base { };
int main() {
base* p = new derived();
delete p; // The is undefined behavior!
}
In section [expr.delete] ยง5.3.5/3 the standard says that if delete
is called on an object whose static type does not have a virtual
destructor:
if the static type of the object to be deleted is different from its dynamic type, the static type shall be a base class of the dynamic type of the object to be deleted and the static type shall have a virtual destructor or the behavior is undefined.
This is the case regardless of the question whether the derived class added any data members to the base class.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents