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

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

QSharedPointer<t> Qsharedfoo;

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

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

Qsharedfoo = rawfoo

2 ответа

Решение

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

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

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

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

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

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

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

Qsharedfoo.reset(rawFoo);

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

Прямо из документации 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);
Другие вопросы по тегам