МЛ
25 марта 2022 г. 17:34

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

  1. QList<MyClass*> list;
  2. MyClass* a = new MyClass();
  3. list.append(a);
  4. 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()

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

        Комментарии

        Только авторизованные пользователи могут публиковать комментарии.
        Пожалуйста, авторизуйтесь или зарегистрируйтесь