Форум: "Основная";
Текущий архив: 2015.10.04;
Скачать: [xml.tar.bz2];
ВнизTInterfacedObject борьба с circular references Найти похожие ветки
← →
Unknown user © (2012-03-29 09:56) [0]Расскажите, каким способом вы боретесь с такой ситуацией. Имеются интерфейсные объекты Parent и Child. Parent содержит ссылку на Child, а Child на Parent.
Parent.FChild
Child.FParent
В итоге RefCount обоих объектов никогда не достигает 0 и объекты не освобождаются.
← →
Ega23 © (2012-03-29 11:27) [1]Не надо их делать, и всё.
← →
Сергей М. © (2012-03-29 11:30) [2]убить друг-друга одновременнно по обоюдному согласию - это дорогого стОит)
← →
Дмитрий С © (2012-03-29 11:37) [3]У одного из них сделай ссылку типа Pointer
← →
Unknown user © (2012-03-29 16:21) [4]Pointer - чревато исключениями. Хотя конечно любое неосторожное программирование этим чревато.
Вот нашел такое решение
http://www.finalbuilder.com/Resources/Blogs/TabId/181/PostId/410/WeakRefence-in-Delphi-solving-circular-interfac.aspx
Никто не использовал?
Оказывается в .NET и вообще в языках с автоматической сборкой мусора такой проблемы нет. Если объекты связаны между собой, но снаружи на них никто не ссылается они безболезнено удаляются.
← →
jack128_ (2012-04-04 16:26) [5]TContainedObject не ?
← →
Unknown user © (2012-04-04 16:46) [6]>jack128_
Нет не подходит.
Во-первых, у меня оба класса - родительский и дочерний являются предками одного и того же базового класса, основанного на TInterfacedObject.
Во-вторых. Вот выдержка из хелпа
Aggregated objects must not maintain their own reference count - they must have the same lifetime as their controller.
TContainedObject is an aggregated object that isolates QueryInterface on the aggregate from the controller.
Мне же надо, использовать дочерние объекты и без родительского класса. С полноценным подсчетом ссылок.
← →
jack128_ (2012-04-04 17:46) [7]Ну тогда только ручками. в destroy родителя обнуляй ссылки в чайлде, при уничтожении чайлда - обнуляй ссылку у родителя.
← →
Unknown user © (2012-04-04 17:50) [8]Так и сделал, спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2015.10.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c