Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TInterfacedObject борьба с circular references


Unknown user ©   (2012-03-29 09:56:00) 

Расскажите, каким способом вы боретесь с такой ситуацией. Имеются интерфейсные объекты Parent и Child. Parent содержит ссылку на Child, а Child на Parent.

Parent.FChild
Child.FParent

В итоге RefCount обоих объектов никогда не достигает 0 и объекты не освобождаются.


Unknown user   (2012-04-04 17:50:00) [1]

Так и сделал, спасибо.


jack128_   (2012-04-04 17:46:00) [2]

Ну тогда только ручками. в destroy родителя обнуляй ссылки в чайлде, при уничтожении чайлда - обнуляй ссылку у родителя.


Unknown user   (2012-04-04 16:46:00) [3]

>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 16:26:00) [4]

TContainedObject не ?


Unknown user   (2012-03-29 16:21:00) [5]

Pointer - чревато исключениями. Хотя конечно любое неосторожное программирование этим чревато.

Вот нашел такое решение

http://www.finalbuilder.com/Resources/Blogs/TabId/181/PostId/410/WeakRefence-in-Delphi-solving-circular-interfac.aspx

Никто не использовал?

Оказывается в .NET и вообще в языках с автоматической сборкой мусора такой проблемы нет. Если объекты связаны между собой, но снаружи на них никто не ссылается они безболезнено удаляются.


Дмитрий С   (2012-03-29 11:37:00) [6]

У одного из них сделай ссылку типа Pointer


Сергей М.   (2012-03-29 11:30:00) [7]

убить друг-друга одновременнно по обоюдному согласию - это дорогого стОит)


Ega23   (2012-03-29 11:27:00) [8]

Не надо их делать, и всё.


Наверх

Титульная страница Поиск, карта сайта Написать письмо