Название: утечка памяти: QVector::clear Отправлено: foufou от Март 17, 2012, 14:31 Разбираю чужую программу, в которой происходит большая утечка памяти. Обнаружил одно подозрительное место.
Имеется такой класс: class MyClass { public: MyClass(); ~MyClass(); ... private: QVector<OtherClass* > vec; ... } Деструктор этого класса MyClass выглядит таким образом: MyClass::~MyClass { vec.clear(); } Что-то мне кажется, что такой деструктор приведет к утечке памяти. QVector содержит в себе указатели на экземпляры класса OtherClass. Простое очищение вектора vec едва ли приведет к освобождению памяти - скорее это приведет к мусору, который к тому же будет накапливаться по мере работы программы. Действительно ли это так ? Просто я слышал, что QVector "умнее" обычного стл-вского vector. Если утечка все же имеет место, то как правильно освобождать память в деструкторе ? Название: Re: утечка памяти: QVector::clear Отправлено: BRE от Март 17, 2012, 14:39 Если утечка все же имеет место Утечка будет, если эти же объекты не освобождаются где нибудь еще.как правильно освобождать память в деструкторе ? Пройтись циклом по всему вектору и освободить все объекты или воспользоваться qDeleteAll.Название: Re: утечка памяти: QVector::clear Отправлено: foufou от Март 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(); } Вроде работает. |