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