QSharedPointer из необработанного указателя

В настоящее время у меня есть что-то вроде этого:

QSharedPointer<t> Qsharedfoo;

Теперь у меня есть необработанный указатель на foo, который также называется rawfoo, Как сделать так, чтобы foo point владел необработанным указателем и начинал указывать на него? Я знаю, в импульсах с общими указателями мы могли бы использовать boost::make_shared
как мы это делаем QSharedPointer ?

Я хочу сделать что-то вроде этого:

Qsharedfoo = rawfoo

3

Решение

Как сделать так, чтобы foo point владел необработанным указателем и начинал указывать на него? Я знаю, что в boost с общими указателями мы могли бы использовать boost :: make_shared, как мы это делаем с QSharedPointer?

Вы не можете, к сожалению.

  • Вам всегда нужно будет пройти через конструктор в отличие от make_shared.

  • Это не обязательно исключение безопасно.

Таким образом, вам нужно пройти через конструктор и оператор = следующее:

Qsharedfoo = QSharedPointer<T>(rawfoo); // operator=() overload

или, если у вас уже есть ссылка на указатель, используйте метод reset () следующее:

Qsharedfoo.reset(rawFoo);

Но, как уже упоминалось в начале, это не то, что вы ищете.

3

Другие решения

Прямо из Документация Qt, у нас есть что-то вроде этого:

QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject);

Вы можете передать указатель таким же образом:

// Here I assume that T is the class you're using for Qsharedfoo.
QSharedPointer<T> Qsharedfoo = QSharedPointer<T>(rawfoo);
6

По вопросам рекламы [email protected]