Pregunta

¿Cuál es la diferencia entre estos dos tipos de punteros? Por lo que yo puedo leer, QSharedPointer puede manejar bien la situación, así que ¿cuál es la necesidad de QSharedDataPointer?

¿Fue útil?

Solución

A partir de la documentación de Qt QSharedDataPointer

  

La clase QSharedDataPointer   representa un puntero a un implícitamente   objeto compartido. QSharedDataPointer   hace que la escritura de su propia forma implícita   clases compartidas fáciles.   implementos QSharedDataPointer   recuento de referencias thread-safe,   asegurando que la adición   QSharedDataPointers a su reentrada   clases no les hará no reentrante.   intercambio implícito es utilizado por muchos Qt   clases de combinar la velocidad y   eficiencia de la memoria de punteros con la   la facilidad de uso de las clases. Ver Compartidos   Página de clases para más información.

Ejemplo de uso -

 #include <QSharedData>
 #include <QString>

 class EmployeeData : public QSharedData
 {
   public:
     EmployeeData() : id(-1) { }
     EmployeeData(const EmployeeData &other)
         : QSharedData(other), id(other.id), name(other.name) { }
     ~EmployeeData() { }

En QSharedPointer

  

La clase tiene una QSharedPointer   fuerte referencia a un puntero compartida   El QSharedPointer es un automático,   compartida puntero en C ++. se comporta   exactamente igual que un puntero normal para   fines normales, incluyendo el respeto de   constness. QSharedPointer eliminará   el puntero se está llevando a cabo cuando se va   fuera de alcance, proporcionado ningún otro   objetos QSharedPointer hacen referencia   a él.

>  QSharedPointer<MyObject> obj =
>          QSharedPointer<MyObject>(new MyObject);

Por lo tanto, la QSharedDataPointer se utiliza para hacer la creación de clases implicititly compartidos. Mientras que QSharedPointer es un recuento de referencias inteligente puntero que apunta a clases.


Editar

Cuando se lee en Qt? , me encontré con este enlace http: //blog.qt.io/blog/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have/. Un realmente excelente discusión de los diferentes punteros inteligentes Qt tiene (API actual tiene 8).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top