LINUX.ORG.RU
http://www.kalinin.ru/programming/cpp/28_07_00.shtml

В принципе, в практически любой мало-мальски толковой книге по C++ рассказывается, зачем нужны виртуальные деструкторы и почему их надо использовать. Тем не менее, как показывает практика, ошибка, связанная с отсутствием виртуальных деструкторов, настолько распространена, что я решил еще раз рассказать о ней.....Дальше не для Ъ, по ссылке
madcore ★★★★★
()
Чтоб delete отрабатывал как надо. Независимо от того, как объявлен указатель.
svu ★★★★★
()
если у класса есть виртуальные методы, то предполагается полиморфное поведение - обособленная работа с обьектом через указатель на интерфейс (базовый класс). operator new() при создании обьекта располагает информацией о его динамическом типе, operator delete() при удалении - нет. поэтому единственная возможность препятствовать удалению неправильного (более общего) типа - предоставить operator delete() необходимую для удаления обьекта информацию посредством таблицы виртуальных функций
jtootf ★★★★★
()
Проблема не в наличии виртуальных методов, а в сложностях типа:

for(std::vector<A*>::iterator i = ... ) delete *i;

т.е. нужно делать виртуальные деструкторы в принципе для всех классов, что бы избежать подобных сложностей в подобных случаях.

anonymous
()
Ответ на: комментарий от anonymous
Проблема не в наличии виртуальных методов, а в сложностях типа:

for(std::vector<A*>::iterator i = ... ) delete *i;

т.е. нужно делать виртуальные деструкторы в принципе для всех классов, что бы избежать подобных сложностей в подобных случаях????

anonymous
()
Ответ на: комментарий от anonymous
> Проблема не в наличии виртуальных методов, а в сложностях типа: for(std::vector<A*>::iterator i = ... ) delete *i;

да

dilmah ★★★★★
()
Ответ на: комментарий от Legioner
>Если у класса нет виртуальных методов, виртуальный конструктор формально не обязателен

корректней будет "если класс не предполагает полиморфного поведения". виртуальных функций-членов на определённом этапе разработки у класса может не быть, но иерархия классов при этом может предполагать их наличие - просто данная функциональность в проект ещё не была внесена. отслеживать потом утечки памяти из-за подобного подхода - не лучшее времяпровождение, отнюдь

jtootf ★★★★★
()
В нормальных языках вообще невозможно создать одновременно полиморфный тип и статический финализатор для него.
anonymous
()
Ответ на: комментарий от anonymous
> В нормальных языках вообще невозможно создать одновременно полиморфный тип и статический финализатор для него.

а вот у нас - можно, и мы горды этим фактом :-P

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda
угу :) Можно даже *((char*) 0) = 0 написать, и в досе это даже будет работать :) наверное.
Legioner ★★★★★
()
Ответ на: комментарий от anonymous
Слушай тут проблем ни каких нет, добавление виртуального диструктора там где он не нужен только раздует класc.
aton
()
Ответ на: комментарий от jtootf
Чего то я твою мысль уловить не могу, можно как то проще изложить? Причем тут утечки?
aton
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.