![]() |
|
Модераторы: bsa |
![]()
|
|
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
в общем имеется родительский объект который содержит несколько указателей на дочерние объекты, или как в декораторе только один указатель на объект которого декорируем, конструктор вызывается так (для декоратора):
значит ли это что деструктор декоратора уничтожит и объект которого декорирует? если так то как можно это обойти? в composite та же история, делаю несколько объектов, вызываю AddChild(), но после этого я теряю все внешние указатели, т.е. только родитель для которого AddChild вызывался и знает об этих объектах, значит ли это что он ответственен за их удаление? как присобачить сюда shared_ptr? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
правило простое - кто память выделил, тот ее и освобождает.
shared_ptr втыкать необходимо вместо обычных указателей:
Но, думаю, проблема не в строке, а в архитектуре. Рекомендую ознакомиться с подходом примененном в Qt - там достаточно грамотно все придумано. |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
за это спасибо, я не знал. а вот в QT куда именно смотреть? я с ним абсолютно не знаком. Добавлено через 6 минут и 36 секунд я вообще то никогда так не делаю, т.е. new в параметрах функции ) это пример из "Design Patterns - Gang of four" тогда получается что с shared_ptr будет правильно? например если это результат от factory? |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
asmdzen, читани http://rsdn.ru/article/cpp/smartptr.xml?print
Хорошо написано про смарт поинтеры, возможно, тебе shared_ptr и не понадобится. -------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
QT != Qt, QT == QuickTime Смотреть надо в самоучители (tutorials). Ты можешь сделать один объект владельцем другого. При уничтожении, владелец убивает все вложенные. Но если уничтожается вложенный раньше владельца, то факт владения отменяется. Таким образом код:
|
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
spyswamp, спасибо, просвятился )
поставлю shared_ptr в этих объектах и пускай если нет больше указателей на их детей (как они вообще называются, в смысле child??) то они сами удаляют их в деструкторе. bsa опять рассинхрон, это отличная идея )) то что нужно для composit'ов, спасибо! в общем всем спасибо, вопрос закрываю. Это сообщение отредактировал(а) asmdzen - 3.8.2011, 12:41 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |