Удаление объектов из списка шаблонов - PullRequest
1 голос
/ 22 сентября 2010

У меня есть список шаблонов, скажем,

List<SuperClass*>* mList;

for(int i = 0;i < mList->ElementsCount();i++)
    mList->DeleteElementAtIndex(i);

в mList добавляются объекты подклассов.

При удалении объекта из списка, мне нужно преобразовать объект в соответствующийподклассы и вызвать метод удаления?

1 Ответ

3 голосов
/ 22 сентября 2010

Нет, достаточно вызвать оператор delete для каждого указателя без явного преобразования, но вы должны убедиться, что деструкторы классов в иерархии классов объявлены как virtual (достаточно отметить только один избазовый класс как таковой).Таким образом, вызов деструктора будет виртуальным, поэтому будет вызван правильный деструктор.

Если вы не объявите деструктор как виртуальный, при вызове delete для каждого указателя деструкторбазового класса будет вызываться вместо правильного;Именно по этой причине почти всегда считается ошибкой иметь иерархии классов без деструктора virtual.

Подробнее об этом можно найти в соответствующей записи C ++ FAQ Lite.

Кстати, этот список, похоже, не является списком STL (std::list), в таком случае вам следует удалить тег STL из своего вопроса.

...