МЛ
25 березня 2022 р. 17:34

QList удаление элементов

QList<MyClass*> list;
MyClass* a = new MyClass();
list.append(a);
list.clear();

Удалится ли элемент списка или только ссылка на него из списка.
Нужно ли при очищении списка отдельно удалять элементы через delete a;

4

Вам це подобається? Поділіться в соціальних мережах!

3
Виктор Калесников
  • 25 березня 2022 р. 18:06
  • (відредаговано)

list.clear() - очистит только указатели.
Два варианта:
1) list.at(i)->deleteLater(); // удалять обьект класса через итератор Qlist как вы и предположили.
2) QList ().swap(list); // есть в официальной документации. https://doc.qt.io/qt-6/qlist.html#clear

    Виктор Калесников
    • 25 березня 2022 р. 18:27

    У меня были похожие вопросы в работе с QByteArray.
    Qt максимально возможно избегает реализации функций применяющих глубокое копирование. Это вызывает неожиданные результаты при присваивании, удалении, создании объектов и тд.

    И с QList ().swap(list); так же не все понятно из доков. Нужно смотреть по факту.

      glum_psyche
      • 25 березня 2022 р. 23:05

      Также можно применить qDeleteAll()

      Подробнее тут

        Коментарі

        Only authorized users can post comments.
        Please, Log in or Sign up