Diferencia entre QSharedPointer y QSharedDataPointer?
-
28-09-2019 - |
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?
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() { }
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).