QSharedPointer desde un puntero sin formato
-
22-12-2019 - |
Pregunta
Actualmente tengo algo como esto:
QSharedPointer<t> Qsharedfoo;
Ahora tengo un puntero sin formato a foo, también llamado rawfoo
.¿Cómo puedo hacer que foo point sea dueño del puntero sin formato y comience a señalarlo?Sé que en impulso con sugerencias compartidas podríamos usar boost::make_shared
¿Cómo lo hacemos con QSharedPointer
?
Quiero hacer algo como esto:
Qsharedfoo = rawfoo
Solución
¿Cómo puedo hacer que Foo Point sea propio del puntero crudo y comience a apuntarle?Sé que en Boost con los punteros compartidos podríamos usar BOOST :: make_shared ¿Cómo lo hacemos con QSharedpointer?
No puedes, desafortunadamente.
-
Usted siempre tendrá que pasar por el constructor a diferencia de Make_Shared.
-
No es necesariamente una excepción segura.
En resumen, deberías pasar por el constructor y Operador= de la siguiente manera:
Qsharedfoo = QSharedPointer<T>(rawfoo); // operator=() overload
O si ya tiene una referencia a un puntero, use el Método de reinicio () de la siguiente manera:
Qsharedfoo.reset(rawFoo);
Pero como se mencionó en el principio, estas no son operaciones iguales a lo que está buscando.
Otros consejos
directamente desde la Documentación QT , tenemos algo comoesto:
QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject);
Básicamente puedes pasar tu puntero de la misma manera:
// Here I assume that T is the class you're using for Qsharedfoo.
QSharedPointer<T> Qsharedfoo = QSharedPointer<T>(rawfoo);