crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Удаление объекта из QList, Утечки
QMainWindow
  опции профиля:
сообщение 9.1.2013, 21:27
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 1.8.2010
Пользователь №: 1922

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вечер добрый.
Есть код:
MyWidget *myWidget = new MyWidget(this);
    myWidgetList.append(myWidget);
    delete myWidget;
Создал некоторый виджет, положил его для удобства в QList, удалил, чтобы не занимал место. Далее этот список попользовал и пришло время удалить из него этот виджет.
myWidgetList.removeAt(i);
Тут вопрос: чтобы этот виджет удалился и из списка, и из памяти, достаточно этой строчки? Или нужно как-нибудь так:
myWidgetList.first().~MyWidget();
myWidgetList.removeAt(i);


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

Сообщение отредактировал QMainWindow - 9.1.2013, 21:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ssoft
  опции профиля:
сообщение 10.1.2013, 11:36
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Рекомендую использовать умные указатели, тогда вообще не нужно заморачиваться с удалениями, код будет понятнее и не будет приводить к утечкам памяти, например, в случае исключений.

Что-то вроде

    typedef QSharedPointer< MyWidget > Widget;
    myWidgetList.append( Widget( new MyWidget ) ); // добавление

    ...

    myWidgetList.removeAt( i ); // удаление

    ...

    myWidgetList.clear(); // удаление всех сразу


Сообщение отредактировал ssoft - 10.1.2013, 11:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 9:20