Вопрос

На данный момент у меня есть что-то вроде этого:

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top