2009-09-26 7 views
18

Comme il a été écrit here Qt jusqu'à maintenant a 8 classes pointeur intelligent specilized. On dirait que c'est tout ce dont vous aurez besoin. Toutefois, pour utiliser l'un de ces pointeurs intelligents, votre classe doit être dérivée de QObject, ce qui n'est pas toujours pratique. Existe-t-il d'autres implémentations de pointeurs intelligents dans Qt qui fonctionnent avec des classes arbitraires?Pointeurs intelligents dans Qt

+8

En fait, pour la plupart de ces pointeurs que vous n'avez pas besoin de dériver de QObject, je ne pense pas. Il y a d'autres choses que vos classes devraient gérer, ou dériver d'autres classes Q, pour certaines d'entre elles. AFAIK, seul QPointer a besoin que votre classe soit dérivée de QObject. Cela étant dit, ils nécessitent la possibilité d'utiliser Qt dans votre projet. –

Répondre

18

De nombreuses classes de Qt sont dérivées de QObject, et alors que certains de la construction dans les classes intelligentes pointeur sont liées à QObject (ou QSharedData), les modèles QSharedPointer et QScopedPointer semblent permettre des pointeurs sur quoi que ce soit.

Au-delà, vous trouverez quelques-uns smart pointer templates dans Boost:

  • scoped_ptr - propriété unique simple d'objets simples. Non-recouvrable
  • scoped_array - Simple propriété unique de tableaux. Non-recouvrable
  • shared_ptr - Propriété d'objet partagée entre plusieurs pointeurs.
  • shared_array - Propriété de groupe partagée entre plusieurs pointeurs.
  • weak_ptr - Les observateurs non propriétaires d'un objet appartenant à shared_ptr.
  • intrusive_ptr - Propriété partagée d'objets avec un nombre de références intégré.
+0

C'est vrai. STL a aussi auto_ptr. La question concerne QT. – alexkr

+1

Pratiquement tout en Qt utilisant QObject comme base, donc si vous voulez quelque chose qui fonctionne en dehors de cela, Boost un endroit pour aller chercher :) –

+8

Wow, j'utilise encore C++ comme "C avec classes" (c'est C++ autour de 1990). Cela fonctionne, tous ces affreux pointeurs intelligents illisibles me rendent malade. – Lothar