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.