В этот ответ ответ:
В частности, вам не разрешено удалять std::vector<T>*
, который фактически указывает на производный объект (даже если производный класс добавляет нет членов), но компилятор обычно не может вас предупредить об этом.
Я понимаю, что виртуальный деструктор необходим, если объект будет удален с помощью базового указателя. Это позволяет каждому классу уничтожать своих членов (по крайней мере, я так думаю). Но если класс сам по себе не имеет никаких членов, то почему его не следует удалять с помощью базового указателя? типа а не с одной из баз? Будет ли нормальным наследование от класса с не виртуальным деструктором?