Здесь нет проблем. Деструктор базового класса вызывается сразу после вызова деструктора производного класса.
Есть только одно обстоятельство, когда это не так: удаление вызывается по указателю на базовый класс, где деструктор базового класса равен , а не виртуальный.
Во всех случаях, когда у вас есть локальный экземпляр класса, созданный в стеке, и функция или метод завершаются, даже из-за исключения, экземпляр корректно уничтожается.
При любых обстоятельствах, когда экземпляр класса равен new
d и впоследствии удаляется с помощью указателя на конкретный класс, который был создан, экземпляр корректно уничтожается.
Когда экземпляр класса new
d, но удален через указатель базового класса, экземпляр корректно уничтожается только тогда, когда базовый класс имеет виртуальный деструктор (либо сам объявленный virtual
, либо его собственная база имеет виртуальный деструктор), экземпляр правильно уничтожен.