Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt4] Удаление QMap 
:(
    Опции темы
Purple_Light
Дата 29.4.2009, 18:36 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 19.4.2007

Репутация: нет
Всего: нет



У меня есть QMap следующего вида:
Код

QMap<QStandardItem *, MyClass *> map;

Он является членом класса и в деструкторе я его удаляю как 
Код

qDeleteAll(map);


Назначение этого мапа очень простое. Пользователь кликает на элемент в дереве, нажатый QStandardItem* ищется в мапе, выбирается соответствующий ему экземпляр класса и дальше с ним операции происходят.

Работает это все нормально, кроме того, что программа valgrid говорит, что происходят утечки памяти при добовлении пар в мап. Т.е. когда я добовляю элемент в мап
Код

map.insert(standardItem, myClass);


Мне казалось, что макрос qDeleteAll проходится по мапу и удаляет все его элементы, но похоже что это не так.

Следовательно мой вопрос, как правильно в этом случае удалить мап? И вообще является ли концепция правильной, когда в мапе в качестве ключа используется указатель на экземпляр класса (а например не int)?
PM MAIL   Вверх
SABROG
Дата 29.4.2009, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



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

Еще на эту надпись обрати внимание:

Цитата

Only the objects stored in each container will be deleted by this function; objects used as keys will not be deleted.


Т.е. те указатели, которые ты используешь в качестве ключа - удалены не будут. Может есть смысл использовать QSharedPointer?

Это сообщение отредактировал(а) SABROG - 29.4.2009, 21:12


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Любитель
Дата 29.4.2009, 21:30 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(Purple_Light @  29.4.2009,  18:36 Найти цитируемый пост)
нажатый QStandardItem* ищется в мапе

Как айтемы создаются? Как модель создаётся? Она деаттачится от дерева? Дерево удаляется? qDeleteAll, как правильно заметил SABROG, отлично вызовет delete для всех значений, но не ключей. Да и, вообще говоря, зачем тебе этот мэп? Либо сохраняй данные нужные по своим юзер-ролям, либо (что лучше) создай свою модель. Дженерик-решения тем и плохи, что они дженерик smile


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.2347 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.