И ведь транслируется и наверно даже работает.
Но точно неправильно. При удалении списка "some_list" не вызываются
диструкторы классов "some_A" и "some_B".
Вопрос: А как заставить их вызываться?
Деструктор базового класса должен быть виртуальным.
И кстати, может ли быть деструктор чисто виртуальным и есть ли в этом смысл ?
Re[2]: Как заставить их вызываться диструкторы потомков?
От:
Аноним
Дата:
29.10.02 06:14
Оценка:
Здравствуйте unintruder, Вы писали:
U>Здравствуйте Seregik, Вы писали:
U>Деструктор базового класса должен быть виртуальным. U>И кстати, может ли быть деструктор чисто виртуальным и есть ли в этом смысл ?
Дак я тоже так думал. Только почему-то при просто виртуальном диструкторе все равно не вызываются деструкторы потомков. А чисто виртуальные диструкторы не бывают.
Хотя извини в этом примере вызаваются это я в своей программе (там все гораздо сложнее) где-то наверно ступил чуток.
Спасибо за помощь
Re[3]: Как заставить их вызываться диструкторы потомков?
Здравствуйте Инженер, Вы писали:
И>Здравствуйте Аноним, Вы писали:
А>>А чисто виртуальные диструкторы не бывают.
И>Бывают. Стандартом это разрешено.
Не знаю точно как в стандарте, а на практике, Объявление чисто виртуального деструктора разрешено, но деструктор предка вызывается в любом случае, даже если деструктор предка объявлен как чисто виртуальный, т.е. если он нигде не определен, то будет ошибка при линковке.
Где-то по моему в книжке Мэйерса было про это написано.
Re[5]: Как заставить их вызываться диструкторы потомков?
От:
Аноним
Дата:
29.10.02 07:23
Оценка:
Здравствуйте __Nicolay, Вы писали:
А>>>А чисто виртуальные диструкторы не бывают.
И>>Бывают. Стандартом это разрешено.
N>Не знаю точно как в стандарте, а на практике, Объявление чисто виртуального деструктора разрешено, но деструктор предка вызывается в любом случае, даже если деструктор предка объявлен как чисто виртуальный, т.е. если он нигде не определен, то будет ошибка при линковке.
N>Где-то по моему в книжке Мэйерса было про это написано.
Значит, не нужно читать таких книжек.
Re[6]: Как заставить их вызываться диструкторы потомков?
Здравствуйте Аноним, Вы писали:
А>Значит, не нужно читать таких книжек.
Почему?
Там было кажется написано зачем может понадобится чисто виртуальный деструктор.
У Страуструпа я про это ничего не нашел, но в чисто абстрактных классах у него виртуальный деструктор определен.
Re[6]: Как заставить их вызываться диструкторы потомков?
Здравствуйте Аноним, Вы писали:
А>Здравствуйте __Nicolay, Вы писали:
А>>>>А чисто виртуальные диструкторы не бывают.
И>>>Бывают. Стандартом это разрешено.
N>>Не знаю точно как в стандарте, а на практике, Объявление чисто виртуального деструктора разрешено, но деструктор предка вызывается в любом случае, даже если деструктор предка объявлен как чисто виртуальный, т.е. если он нигде не определен, то будет ошибка при линковке.
N>>Где-то по моему в книжке Мэйерса было про это написано.
А>Значит, не нужно читать таких книжек.
Да нет, именно такие книжки и нужно читать...
Любите книгу — источник знаний (с) М.Горький
Re[3]: Как заставить их вызываться диструкторы потомков?
U>>И кстати, может ли быть деструктор чисто виртуальным и есть ли в этом смысл ?
Может, если ты хочешь чтобы класс был абстрактным, а все твои виртуальные функции не являются чисто виртуальными (даже если они чисто виртуальные, то все равно можно и для них определение дать, только придется их вызывать статически .
А>Дак я тоже так думал. Только почему-то при просто виртуальном диструкторе все равно не вызываются деструкторы потомков. А чисто виртуальные диструкторы не бывают.
Бывают! Посмотри, допустим, как в МФЦ объявлен CObject. Там именно такой деструктор. Правда при всей своей чистоте, ты все равно должен дать его определение.
Re[7]: Как заставить их вызываться диструкторы потомков?
От:
Аноним
Дата:
29.10.02 08:14
Оценка:
Здравствуйте Bell, Вы писали:
N>>>Не знаю точно как в стандарте, а на практике, Объявление чисто виртуального деструктора разрешено, но деструктор предка вызывается в любом случае, даже если деструктор предка объявлен как чисто виртуальный, т.е. если он нигде не определен, то будет ошибка при линковке.
N>>>Где-то по моему в книжке Мэйерса было про это написано.
А>>Значит, не нужно читать таких книжек.
B>Да нет, именно такие книжки и нужно читать...
Дело в том, что, даже объявив деструктор чисто виртуальным, ему по-прежнему можно дать определение. И ошибок "линковки" (т. е. сборки) не будет.
Re[7]: Как заставить их вызываться диструкторы потомков?
От:
Аноним
Дата:
29.10.02 08:16
Оценка:
Здравствуйте __Nicolay, Вы писали:
А>>Значит, не нужно читать таких книжек. N>Почему? N>Там было кажется написано зачем может понадобится чисто виртуальный деструктор.
N>У Страуструпа я про это ничего не нашел, но в чисто абстрактных классах у него виртуальный деструктор определен.
Ну так и я про то же — но писать, будто чисто виртуальные деструкторы невозможны, — это же неправда. Его просто надо определить, и все будет хорошо.