Russian Qt Forum
Ноябрь 21, 2024, 22:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QScopedPointer и QList  (Прочитано 5551 раз)
KSergeyP
Новичок

Offline Offline

Сообщений: 27


Просмотр профиля
« : Апрель 03, 2023, 08:40 »

Добрый день!
Возможно ли создать QList<QScopedPointer>? Точнее создать то его можно, а вот элементы добавить не получается.
Проблема в том что при вызове append указатель копируется в лист, а копирование запрещено.
Собственно вопрос можно ли создавать указатель непосредственно сразу в листе, чтобы не было необходимости ничего никуда копировать?
P.S: с SharedPointer таких проблем нет, но хотелось бы разобраться именно с unique/QScopedPointer

И второй вопрос, как у умных указателей (shared) с поток безопасностью? Что будет если один поток пытается сделать копию, а в другом в этот момент уничтожается последний указатель?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Апрель 03, 2023, 09:03 »

std::unique_ptr можно перемещать (std::move), а QScopedPointer видимо нельзя (не вижу соответствующего конструктора)

std::shared_ptr потокобезопасен, Qt'шный вариант тоже https://doc.qt.io/qt-6/qsharedpointer.html#thread-safety
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
KSergeyP
Новичок

Offline Offline

Сообщений: 27


Просмотр профиля
« Ответ #2 : Апрель 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>]'
« Последнее редактирование: Апрель 03, 2023, 11:44 от KSergeyP » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Апрель 03, 2023, 15:06 »

QList не умеет добавлять && элементы, может только другой объект QList таким образом добавить (т.е. можно создать QList in-place и добавить). а вот например std::vector может.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.106 секунд. Запросов: 22.