[Режим "Зануда" ON]Ну, вобще говоря, вполне обычный и правомерный вопрос. И любого программера, знакомого с ООП, он не должен смущать.
Ответ тут: зависит от типа деструктора. Чтобы объект удалился правильно, и деструктор был вызван именно у того типа объекта, который был создан - необходимо объявлять его виртуальным.
Но, и правда, довольно идиотский вариант - иметь указателя на потомка, а в нем - объект-предок. (На картинке запятая в возмущении пропущена.)
Реально дохрена случаев, когда создаются объекты-наследники, а мы имеем указатель на предка, и нам необходимо эти объекты удалить. Именно поэтому настоятельно рекомендуется деструктор делать виртуальным - чтобы вызывался именно тот деструктор, который принадлежит созданному типу объекта.
А тут, как я понял, наоборот. Что не есть хорошо (и ещё не факт, что компилятор разрешит такое преобразование типов).
Однако, витруальный деструктор, по идее, всё равно, должен быть вызван правильно - у объекта-предка (у класса А).
Это сообщение отредактировал Laryx - 14.11.2022 - 15:10