Нет, достаточно вызвать оператор delete
для каждого указателя без явного преобразования, но вы должны убедиться, что деструкторы классов в иерархии классов объявлены как virtual
(достаточно отметить только один избазовый класс как таковой).Таким образом, вызов деструктора будет виртуальным, поэтому будет вызван правильный деструктор.
Если вы не объявите деструктор как виртуальный, при вызове delete
для каждого указателя деструкторбазового класса будет вызываться вместо правильного;Именно по этой причине почти всегда считается ошибкой иметь иерархии классов без деструктора virtual
.
Подробнее об этом можно найти в соответствующей записи C ++ FAQ Lite.
Кстати, этот список, похоже, не является списком STL (std::list
), в таком случае вам следует удалить тег STL из своего вопроса.