Re: Зачем нужен сборщик мусора? Как жить без деструкторов?
От: drol  
Дата: 03.08.08 12:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Зачем нужен сборщик мусора?

А>Ведь, деструкторы соберут весь мусор.
А>Я не помню когда последний раз руками очищал память в с++.

Вы, почему-то, рассматриваете только самый примитивный случай: короткоживущие неизменяемые независимые объекты на стеке. А вот давайте возьмём долгоживущую изменяемую древовидную структуру в heap'е. Например, дерево объектов UI. Насколько простым будет управление памятью для такой штуки в C++ ? Вот в managed средах/языках вообще ничего делать не надо; порождать свои собственные структуры такого вида также элементарно.

А>Как можно обходиться без деструкторов?

А>неужели код
А>считается удобнее и надежнне чем:
А>а как быть с очисткой ресурсов (закрытием файлов, различных соединений), тоже руками?

Java имеет неудобный синтаксис в этом месте. В C# же для таких случаев есть специальная конструкция using. Вариант же из C++ лично мне не нравится отсутствием явного обозначения области жизни ресурса.
*Хотя... Если бы это делала IDE, то было бы достаточно.

А>В с++ надо один раз очистить ресурс в деструкторе,


Теоретически. А на практике, при написании деструктора C++ сразу возникает очень много ограничений. Простейший пример: исключение в деструкторе => до свидания развёртка стека и всё остальное.

А>Не совсем понятно в чем прелесть такого подхода?


Надеюсь, что вышеизложенное немного прояснило ситуацию
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.