In the delete location, there is no corresponding header file, but only the class's predecessor declaration;
Perhaps the delete is a base class pointer, and the compiler knows the base class, so there is no subclass # include;
If you want to release the memory of the base class when you delete the subclass object, be sure to write the base class destructor as virtual;
If a class does not contain virtual functions, it generally means that it will not be used as a base class. When a class is not intended to be used as a base class, do not define a virtual destructor because it adds a virtual function table, doubling the volume of the object, and possibly reducing its possible value.
So the basic one is: declaring a virtual destructor without reason is as wrong as never declaring it.
Declare a virtual destructor when and only if the class contains at least one virtual function.
Possible reasons why destructors were not executed when C + + DELETE