допустим есть массив, ты его наполняешь, в какой-то момент хочешь убрать объект, что нужно сделать: 1. вызвать свой финализатор для объекта если таковое необходимо (close или makeInvalid или как ты его там назовёшь) 2. перезаписать массив без этого объекта, либо на место объекта записать null
свой финализатор нужен если у тебя есть бизнес логика, которую нужно исполнить перед удалением объекта (закрыть сокет, отправить сообщение), всё что касается памяти туда не входит
Почти всегда, в реальности, деструктор класса полезен тогда и только тогда, когда планируется уничтожать этот класс явно, через destroy, в остальных случаях деструктор бесполезен.
cleanup:none|collect|finalize - how to treat live objects when terminating collect: run a collection (the default for backward compatibility) none: do nothing finalize: all live objects are finalized unconditionally
Почти всегда, в реальности, деструктор класса полезен тогда и только тогда, когда планируется уничтожать этот класс явно, через destroy, в остальных случаях деструктор бесполезен.
чревато необходимостью следить за всеми ссылками на объект
чревато необходимостью следить за всеми ссылками на объект
Ну так почти всегда, когда тебе нужен детерминизм деструкции, приходится следить за всеми ссылками (умные указатели, например). А если детерминизм не нужен, то как правило и деструктор не нужен.
Ну так почти всегда, когда тебе нужен детерминизм деструкции, приходится следить за всеми ссылками (умные указатели, например). А если детерминизм не нужен, то как правило и деструктор не нужен.
получается это уже не тривиальные случаи, требуют и внимания и понимания происходящего
при этом детерменизм бизнес-логики это не мешает обеспечивать (отсутствие деструктора)