История изменений
Исправление byko3y, (текущая версия) :
В крестах же вроде есть полуавтоматическое управление памятью, нет? Умные указатели, деструкторы, вот это все, чтоб без прямого вызова free на буфер
Оно не умеет разруливать взаимные ссылки вообще никак, даже с помощью кодера. Например, у тебя есть банальная связь на умных ссылках a <-> b. Как ее разрушить? Если ты в деструкторе a снимешь связь a -> b, то b снимет ссылку a <- b и грохнет a второй раз до того, как завершится деструктор a. Из-за этого приходится брать ссылку на один из объектов, чтобы явно задавать порядок уничтожения. Соответственно, если объекто больше, то во столько же раз усложняется процедура поэтапного взятия-снятия ссылок — фактически это уже ручное управление памятью, по недоразумению применяющее тупые «умные указатели».
Эта вся проблема решается одним махом, если сделать отдельные методы деинициализации, которые снимают ссылки, но не высвобождают памяти. Но это всё, опять же, придется делать полностью руками, прямо как в Си.
Исходная версия byko3y, :
В крестах же вроде есть полуавтоматическое управление памятью, нет? Умные указатели, деструкторы, вот это все, чтоб без прямого вызова free на буфер
Оно не умеет даже разруливать взаимные ссылки вообще никак, даже с помощью кодера. Например, у тебя есть банальная связь на умных ссылках a <-> b. Как ее разрушить? Если ты в деструкторе a снимешь связь a -> b, то b снимет ссылку a <- b и грохнет a второй раз до того, как завершится деструктор a. Из-за этого приходится брать ссылку на один из объектов, чтобы явно задавать порядок уничтожения. Соответственно, если объекто больше, то во столько же раз усложняется процедура поэтапного взятия-снятия ссылок — по сути это тупо ручное управление памятью, по недоразумению применяющее тупые «умные указатели».
Эта вся проблема решается одним махом, если сделать отдельные методы деинициализации, которые снимают ссылки, но не высвобождают памяти. Но это всё, опять же, придется делать полностью руками, прямо как в Си.