Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.001 c
15-1423949475
Юрий
2015-02-15 00:31
2015.10.04
С днем рождения ! 15 февраля 2015 воскресенье


2-1400138594
Walter White
2014-05-15 11:23
2015.10.04
Вопрос по работе с Move


15-1424208601
Юрий
2015-02-18 00:30
2015.10.04
С днем рождения ! 18 февраля 2015 среда


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


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский