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