![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| umlprog |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 5.12.2009 Репутация: нет Всего: нет |
Я создаю класс-наследник от map<key,value>
В качестве value идут указатели на объекты. Кстати говоря по ходу вопрос: map::clear() не будет уничтожать эти объекты? (В деструкторе стоит цикл c delete объектов второго параметра) Пускай имеется Dictionary<int, MyObject*> m_dict c записями. Когда я выполняю присваивание Dictionary<int, MyObject*> m_dict1=m_dict, все указатели второго параметра шаблона копируются. Таким образом, если разрушается m_dict1, то разрушаются объекты и в m_dict. А это плохо. Может нужно перегрузить copy конструктор Dictionary и там попытаться по новому проинициализировать каждый объект, надеюсь, что они также имеют copy конструкторы? Где я чего не понимаю. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
umlprog, используйте shared_ptr
|
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: нет Всего: 54 |
Боюсь ошибиться, но по моему контейнеры STL требуют явной реализации конструкторов копирования... -------------------- Слава Україні! |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Сомневаюсь. Иначе vector< int > бы не работало |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: нет Всего: 54 |
Эммм... Походу глупость сморозил... Попробую реабилитироваться По моему, в пользовательских классах, которые размещаются в контейнерах STL должен быть явно реализован конструктор копирования... JackYF, теплее -------------------- Слава Україні! |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Gluttton, зачем он там? тип должен быть Copyable, а как это происходит - не важно
|
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: нет Всего: 54 |
ОК... Лучше помолчу...
-------------------- Слава Україні! |
|||
|
||||
| umlprog |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 5.12.2009 Репутация: нет Всего: нет |
А можно обойтись без boost?
(Вот как C# людей портит! Есть способ динамически создать объект как
но для этого кажеться, класс должен содержать DECLARE_DYNAMIC макрос, чего ожидать от пользовательского класса не приходится в 100% случаях. Еще и от CObject нужно унаследоваться. Это сообщение отредактировал(а) umlprog - 15.5.2010, 16:16 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
umlprog, Вы предполагаете, что форумчане знакомы с Вашей задачей и какими средствами Вы ее реализуете..
Однако на самом деле в большинстве случаев это не так, да и телепаты редко заходят.. Поэтому если хотите получить ответ, высказывайте не кучу не связанных ощущений, а нормально сформированный вопрос.. удачи Добавлено через 6 минут и 12 секунд P.S. наследование в том числе и приватное от стл контейнеров не рекомендовано. Я так понимаю хранить Вы хотите в мапе сами объекты, и скорей всего полиморфно, тогда лучше всего сделать класс-враппер, который будет отвечать за хранение и правильное полиморфное копирование (читать про Clone) т.е. что то типа map<int, ObjectHolder> |
|||
|
||||
| umlprog |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 5.12.2009 Репутация: нет Всего: нет |
Я вам благодарен, за замечание, однако посчитал, что данной информации достаточно и не хотел перегружать форумчан кучей ненужного (для поднятого вопроса) кода. Укажите, где вы чувствуете недостаток исходной информации.
Почему? Приватное наследование для того, чтобы сохранить целостность данных ограичив доступ к методам, которые могуд поставить целостность под угрозу. Про клонирование у меня идея проскальзывала. Попробую такой подход. Это сообщение отредактировал(а) umlprog - 16.5.2010, 21:01 |
||||
|
|||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
потому что они логически законченные..
перегружать и не нужно.. ну если в первом посте чувствуется просто не оформленная мысль, то нижеследующее я вообще не понимаю откуда появилось ..
предположить, чего Вы хотите этим сказать, конечно можно, но вызывает напряг, после которого уже неохота отвечать... |
||||
|
|||||
| umlprog |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 5.12.2009 Репутация: нет Всего: нет |
Это не ответ.
Уникальные у вас чувства: у других форумчан таких не возникло.
Разве три несчастные строчки вызывают затруднение? |
||||||
|
|||||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
У других форумчан они вызвали более законченные чувства, после которых им (форумчанам) читать дальше и декодировать Ваши вопросы расхотелось
Вы не заметили, что ответы закончились?
А не рекомендуется наследовать от stl контейнеров потому, что они действительно законченные, и если вы собираетесь наследовать от них для расширения функционала контейнера, то это небезопасно, т.к. у контейнеров не виртуальные деструкторы, и удаление наследника через указатель на базовый класс (stl контейнер) может привести к различным утечкам ресурсов. |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |