2009-09-26 13 views
18

Como se ha escrito here Qt hasta ahora tiene 8 clases de puntero inteligente specilized. Parece que es todo lo que necesitará. Sin embargo, para usar cualquiera de estos punteros inteligentes, su clase debe derivarse de QObject, que no siempre es conveniente. ¿Hay otras implementaciones de punteros inteligentes en Qt que funcionan con clases arbitrarias?Punteros inteligentes en Qt

+8

En realidad, para la mayoría de esos indicadores no es necesario que derive de QObject, no creo. Hay algunas otras cosas que las clases necesitarían manejar o derivar de algunas otras Q-classes para algunos de ellos. AFAIK, solo QPointer necesita que su clase se derive de QObject. Habiendo dicho eso, requieren la habilidad de usar Qt en su proyecto. –

Respuesta

18

Muchas clases de Qt se derivan de QObject, y mientras algunos de los incorporados en las clases de puntero inteligente se relacionan con QObject (o QSharedData), los QSharedPointer y QScopedPointer plantillas aparecen para permitir que los punteros a nada.

Más allá de eso, usted encontrará algunos smart pointer templates en Boost:

  • scoped_ptr - propiedad exclusiva simple de objetos individuales. No copiable
  • scoped_array - Propiedad exclusiva de matrices. No copiable
  • shared_ptr - Propiedad del objeto compartida entre múltiples punteros.
  • shared_array - Propiedad de la matriz compartida entre múltiples punteros.
  • weak_ptr - Observadores no propietarios de un objeto propiedad de shared_ptr.
  • intrusive_ptr - Propiedad compartida de objetos con un recuento de referencias incrustado.
+0

Esto es correcto. STL también tiene auto_ptr. La pregunta es sobre QT. – alexkr

+1

Prácticamente todo en Qt usando QObject como base, así que si quieres algo que funcione fuera de eso, aumenta un lugar para ir buscando :) –

+8

Guau, todavía uso C++ como "C con clases" (eso es C++ alrededor de 1990). Eso funciona, toda esta locura de punteros inteligentes, ilegible y fea me enferma. – Lothar

Cuestiones relacionadas