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);