В настоящее время у меня есть что-то вроде этого:
QSharedPointer<t> Qsharedfoo;
Теперь у меня есть необработанный указатель на foo, который также называется rawfoo
, Как сделать так, чтобы foo point владел необработанным указателем и начинал указывать на него? Я знаю, в импульсах с общими указателями мы могли бы использовать boost::make_shared
как мы это делаем QSharedPointer
?
Я хочу сделать что-то вроде этого:
Qsharedfoo = rawfoo
Как сделать так, чтобы 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);