LINUX.ORG.RU

очистка QList<QList<qreal> >

 ,


0

1

Я тоже умею задавать глупые вопросы:

QList<QList<qreal> > &data_a

data_a.clear();
QList<qreal> l;
l.append(1);
l.append(2);
l.append(3);
data_a.append(l);
l.clear();
l.append(10);
l.append(20);
data_a.append(l);
qDebug() << "*** before clear" << data_a;
data_a.clear();
qDebug() << "*** after clear" << data_a;
На выходе:
*** before clear ((1, 2, 3), (10, 20))
*** after clear ()
Правильно я понял что когда я вызываю clear внешнего контейнера то оно поочередно чистит сначала внутренние QList а затем уже внешний? Таким образом я не получу тут утечку памяти? Просто перестраховываюсь :)

оно поочередно чистит сначала внутренние QList а затем уже внешний

оне не чистит внутренние QList, а просто удаляет их. Если списках хранятся не указатели, то утечки не будет.

UVV ★★★★★
()

А вот если бы ты реально знал c++, мысли об утечке в подобном коде у тебя даже бы не возникло. Её тут не может быть, всё на RAII.

anonymous
()
Ответ на: комментарий от UVV

Если списках хранятся не указатели, то утечки не будет.

Спасибо, я так и полагал :)

анонизмусу тоже спасибо :)

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от UVV

clear() вообще не трогает ничего внутри:

template <typename T>
Q_OUTOFLINE_TEMPLATE void QList<T>::clear()
{
    *this = QList<T>();
}
Чтобы удалить содержимое, есть, например, функция qDeleteAll(const Container &c);

fluorite ★★★★★
()
Ответ на: комментарий от fluorite

Ты думаешь, присваивание оставит старые данные в памяти потерянными? Если там не указатели, то все почистится нормально.

А qDeleteAll не очищает список, она только Deletes all the items in the range [begin, end) using the C++ delete operator, как написано в документации Qt.

grondek
()
Ответ на: комментарий от grondek

Тогда, если список указателей ещё нужен, то потом нужно вызвать .clear() для очистки от пустых указателей?

pS
()
Последнее исправление: pS (всего исправлений: 1)
Ответ на: комментарий от fluorite

*this = QList<T>();

Да, хорошая идея была заглянуть в шаблон )))

QList<T>() - это пустой список, когда пустой список пишется на заполненный то старый разумеется удаляется

Так что таки да, clear почистит и те что внутри

I-Love-Microsoft ★★★★★
() автор топика
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.