+ 1 Хороший вопрос Кстати.
Посмотрите, как работает виртуальный механизм для метода без деструктора, и вы обнаружите, что деструктор ведет себя не иначе.
В игре есть 2 механизма, которые могут немного запутать проблему.Во-первых, механизм, который не является виртуальным, происходит при строительстве и разрушении объекта.Объект создается из базового класса в производный класс, в этом порядке, и при разрушении порядок деструкторов меняется на обратный, поэтому он выводится из базового класса.Ничего нового здесь.
Рассмотрите возможность вызова не виртуального метода на основе указателя класса на объект производного класса, что происходит?Реализация базового класса называется.Теперь рассмотрим вызов виртуального метода из указателя базового класса на объект производного класса. Что происходит?Производная версия метода называется.Ничего, что вы еще не знали.
Давайте теперь рассмотрим сценарий деструктора.Вызовите delete для указателя базового класса на объект производного класса, который имеет не виртуальный деструктор.Деструктор базового класса вызывается, и если базовый класс был получен из другого класса, то его деструктор будет вызван следующим.Поскольку виртуальный механизм не задействован, производный деструктор не будет вызываться, потому что уничтожение начинается с деструктора, который вы вызываете в иерархии, и переходит к базовому классу.
Теперь рассмотрим виртуальный деструктор.дело.delete вызывается на основе указателя класса на объект производного класса.Что происходит, когда вы вызываете любой виртуальный метод на указателе базового класса?Производная версия вызывается.Так называется наш деструктор производного класса.Что происходит во время уничтожения, объект разрушается от производного деструктора до базового класса, но на этот раз мы начали уничтожение на уровне производного класса из-за механизма виртуального метода.
Почему стековый объект с не виртуальнымили виртуальный деструктор разрушается от производного до базового класса, когда выходит из области видимости?Потому что в этом случае вызывается деструктор объявленного класса, а виртуальный механизм не имеет к этому никакого отношения.