Re[2]: Зачем нужен сборщик мусора? Как жить без деструкторов
От:
Аноним
Дата:
03.08.08 12:48
Оценка:
Здравствуйте, drol, Вы писали:
D>Вы, почему-то, рассматриваете только самый примитивный случай: короткоживущие неизменяемые независимые объекты на стеке. А вот давайте возьмём долгоживущую изменяемую древовидную структуру в heap'е. Например, дерево объектов UI. Насколько простым будет управление памятью для такой штуки в C++ ? Вот в managed средах/языках вообще ничего делать не надо; порождать свои собственные структуры такого вида также элементарно.
В таких случаях я пользуюсь смарт поинтерами.
Существует проблема циклических ссылок, но я ни разу не сталкивался с такой структурой.
D>Java имеет неудобный синтаксис в этом месте. В C# же для таких случаев есть специальная конструкция using. Вариант же из C++ лично мне не нравится отсутствием явного обозначения области жизни ресурса. D>*Хотя... Если бы это делала IDE, то было бы достаточно.
А>>В с++ надо один раз очистить ресурс в деструкторе,
D>Теоретически. А на практике, при написании деструктора C++ сразу возникает очень много ограничений. Простейший пример: исключение в деструкторе => до свидания развёртка стека и всё остальное.
Не могу представить пример где бы логика требовала исключение в деструкторе. Разумно в деструкторе выполнять действия уничтожающие объекты и соответственно не требующие дополнительных ресурсов. Я считаю, что это совсем не проблема.