C++ est tout au sujet de la mémoire de la propriété
Aka "Sémantique De Propriété"
Il est de la responsabilité du propriétaire d'un morceau de la mémoire allouée dynamiquement pour libérer de la mémoire. Donc, la question devient vraiment qui est propriétaire de la mémoire.
En C++, la propriété est documentée par le type d'un pointeur BRUT est enveloppé à l'intérieur donc dans une bonne (OMI) programme en C++, il est très rare [RARE de ne pas JAMAIS] pour voir RAW pointeurs passés autour (comme matières PREMIÈRES les pointeurs ont pas déduit de la propriété ainsi nous ne pouvons pas dire à qui appartient la mémoire et donc sans une lecture attentive de la documentation que vous ne pouvez pas dire qui est responsable de la propriété).
À l'opposé, il est rare de voir les PREMIÈRES pointeurs stockés dans une classe à chaque RAW pointeur est stocké à l'intérieur de son propre pointeur INTELLIGENT wrapper. (N. B.: Si vous ne possédez pas un objet que l'on ne doit pas être de les stocker, car vous ne pouvez pas savoir quand il va sortir de la portée et être détruit.)
Donc, la question:
- Ce type de Propriété Sémantique avoir des gens qui viennent de partout?
- Ce standard de classes sont utilisées pour mettre en œuvre ces sémantique?
- Quelles situations que vous les trouverez utiles?
Permet de garder 1 type de sémantique de la propriété par la réponse de sorte qu'ils peuvent être voté en haut et en bas individuellement
Résumé:
Sur le plan conceptuel pointeurs intelligents sont simples et naïfs implémentations sont faciles. J'ai vu de nombreuses tentatives de mises en œuvre, mais invariablement, ils sont brisés, d'une certaine façon qui n'est pas évident pour un usage occasionnel et des exemples. Donc je vous recommande de toujours utiliser bien testé "Pointeurs Intelligents" à partir d'une bibliothèque plutôt que de rouler votre propre. std::auto_ptr ou l'un des pointeurs intelligents de boost semblent couvrir tous mes besoins.
std::auto_ptr<T>:
Seule personne est propriétaire de l'objet.
Mais le transfert de propriété est autorisée.
Utilisation:
======
Cela vous permet de définir des interfaces qui montrent explicitement le transfert de propriété.
boost::scoped_ptr<T>
Seule personne est propriétaire de l'objet.
Le transfert de propriété n'est PAS autorisé.
Utilisation:
======
Utilisé pour montrer explicite de la propriété.
L'objet sera détruit par le destructeur ou lorsqu'il est explicitement réinitialiser.
boost::shared_ptr<T> (std::tr1::shared_ptr<T>)
La propriété Multiple.
C'est une simple référence compté pointeur. Lorsque, compte à rebours atteint zéro, l'objet est détruit.
Utilisation:
======
Lorsque l'objet peut avoir plusieurs eurs avec une durée de vie qui ne peut pas être déterminé au moment de la compilation.
boost::weak<T>
Utilisé avec shared_ptr<T>.
Dans les situations où un cycle de pointeurs peut arriver.
Utilisation:
======
Utilisé pour arrêter les cycles de conserver des objets uniquement lorsque le cycle est de maintenir un partagées refcount.