Название: QScopedPointer и QList Отправлено: KSergeyP от Апрель 03, 2023, 08:40 Добрый день!
Возможно ли создать QList<QScopedPointer>? Точнее создать то его можно, а вот элементы добавить не получается. Проблема в том что при вызове append указатель копируется в лист, а копирование запрещено. Собственно вопрос можно ли создавать указатель непосредственно сразу в листе, чтобы не было необходимости ничего никуда копировать? P.S: с SharedPointer таких проблем нет, но хотелось бы разобраться именно с unique/QScopedPointer И второй вопрос, как у умных указателей (shared) с поток безопасностью? Что будет если один поток пытается сделать копию, а в другом в этот момент уничтожается последний указатель? Название: Re: QScopedPointer и QList Отправлено: kambala от Апрель 03, 2023, 09:03 std::unique_ptr можно перемещать (std::move), а QScopedPointer видимо нельзя (не вижу соответствующего конструктора)
std::shared_ptr потокобезопасен, Qt'шный вариант тоже https://doc.qt.io/qt-6/qsharedpointer.html#thread-safety Название: Re: QScopedPointer и QList Отправлено: KSergeyP от Апрель 03, 2023, 11:30 std::unique_ptr можно перемещать (std::move), а QScopedPointer видимо нельзя (не вижу соответствующего конструктора) std::shared_ptr потокобезопасен, Qt'шный вариант тоже https://doc.qt.io/qt-6/qsharedpointer.html#thread-safety В QList не перемещается. Qt 5.12 QList<unique_ptr<int>> IntList; unique_ptr<int> p = make_unique<int>(1); IntList.append(std::move(p)); Не собирается: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]' Название: Re: QScopedPointer и QList Отправлено: kambala от Апрель 03, 2023, 15:06 QList не умеет добавлять && элементы, может только другой объект QList таким образом добавить (т.е. можно создать QList in-place и добавить). а вот например std::vector может.
|