Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.10.04;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
4-1273682403
zamtmn
2010-05-12 20:40
2015.10.04
в SysTreeView32 не приходит WM_CONTEXTMENU


15-1423574803
Pavia
2015-02-10 16:26
2015.10.04
Грамотные книги.


15-1423203208
KSergey
2015-02-06 09:13
2015.10.04
Что есть "виртуальная машина"


15-1424122299
Юрий
2015-02-17 00:31
2015.10.04
С днем рождения ! 17 февраля 2015 вторник


15-1422180830
AndrewAndrey
2015-01-25 13:13
2015.10.04
Ошибка при запуске приложения 0xc0000005