Cette classe template permet de se débarrasser totalement de la désallocation de pointeurs créés avec new.
Elle maintient en interne un compteur de références du pointeur créé, et possède la responsabilité de le deleter lorsqu'il n'est plus référencé. Il est aussi possible de partager un même objet dans plusieurs parties d'un programme, celui ci sera automatiquement effacé lorsqu'il ne sera plus référencé.
Attention : une utilisation incorrecte peut mener à la destruction multiple du même pointeur et donc à une corruption de la mémoire.
Un smart_ptr devrait TOUJOURS être initialisé directement avec un autre smart_ptr ou bien avec un pointeur créé directement avec new.
[Correct] smart_ptr<int> sp_int = new int(5); smart_ptr<int> sp_int2 = sp_int;
[Incorrect] int* p_int = new int(5); smart_ptr<int> sp_int = p_int; smart_ptr<int> sp_int2 = p_int;
Si un smart_ptr se référence lui même, le pointeur référencé ne sera jamais détruit.
Source / Exemple :
// tout est dans le zip
Conclusion :
En contrepartie de la fiabilité au niveau mémoire que l'utilisation de cette classe procure à un programme complexe, il faut à tout prix respecter le mode d'emploi et ne pas construire un smart_ptr depuis une variable qui contient un pointeur normal, mais directement depuis un pointeur renvoyé par new.
Il ne faut pas utiliser cette classe pour gérer les allocations de tableaux (comme new int[8]), car c'est delete qui est appelé pour effacer l'objet et non pas delete []
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.