Russian Qt Forum
Ноябрь 05, 2024, 22:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: утечка памяти: QVector::clear  (Прочитано 3399 раз)
foufou
Гость
« : Март 17, 2012, 14:31 »

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

Имеется такой класс:

class MyClass
{
public:
    MyClass();
    ~MyClass();
...
private:
   QVector<OtherClass* > vec;
...
}

Деструктор этого класса MyClass выглядит таким образом:

MyClass::~MyClass
{
    vec.clear();
}

Что-то мне кажется, что такой деструктор приведет к утечке памяти. QVector содержит в себе указатели на экземпляры класса OtherClass. Простое очищение вектора vec едва ли приведет к освобождению памяти - скорее это приведет к мусору, который к тому же будет накапливаться по мере работы программы. Действительно ли это так ? Просто я слышал, что QVector "умнее" обычного стл-вского vector.
Если утечка все же имеет место, то как правильно освобождать память в деструкторе ?
Записан
BRE
Гость
« Ответ #1 : Март 17, 2012, 14:39 »

Если утечка все же имеет место
Утечка будет, если эти же объекты не освобождаются где нибудь еще.

как правильно освобождать память в деструкторе ?
Пройтись циклом по всему вектору и освободить все объекты или воспользоваться qDeleteAll.
Записан
foufou
Гость
« Ответ #2 : Март 17, 2012, 15:31 »

Спасибо !

Попробовал и так и сяк:

MyClass::~MyClass()
{
    for (int i = 0; i < vec.count(); i++) delete vec(i);
    vec.clear();
}

MyClass::~MyClass()
{
    qDeleteAll(vec);
    vec.clear();
}

Вроде работает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 21.