Pointeur intelligent
# Pointeur intelligent

En informatique, un pointeur intelligent (en anglais smart pointer) est un type abstrait de données qui simule le comportement d'un pointeur en y adjoignant des fonctionnalités telles que la libération automatique de la mémoire allouée ou la vérification des bornes.

La gestion manuelle de la mémoire dans les langages utilisant les pointeurs est une source courante de bugs, en particulier de fuites de mémoire ou de plantages. Les pointeurs intelligents diminuent ce risque en rendant automatique la libération des ressources : quand le dernier pointeur vers un objet est détruit, par exemple parce qu'il sort de portée, l'objet pointé est détruit simultanément. Cela peut être implémenté par exemple avec le décompte de références. L'utilisation d'un ramasse-miette permet de se passer de pointeurs intelligents.

## En C++

En C++, les pointeurs intelligents sont implémentés à l'aide de templates qui imitent le comportement des pointeurs grâce à la surcharge des opérateurs, tout en fournissant des algorithmes de gestion mémoire.

L'utilisation des pointeurs intelligents permet d'exprimer au programmeur comment gérer les objets retournés par une fonction.

unique_ptr est une classe qui possède un membre qui pointe sur une ressource (objet) non partageable. Lorsque l'objet possédé par le unique_ptr passe hors de portée, l'objet possédé est également détruit.

Les shared_ptr implémentent le comptage de références, ce qui permet de partager l'objet possédé par un shared_ptr entre plusieurs shared_ptr sans se soucier de comment libérer la mémoire associée. Lorsque le dernier shared_ptr est détruit, l'objet pointé est également détruit.

Les weak_ptr permettent de voir et d’accéder à une ressource (objet) possédée par un shared_ptr mais n’ont aucune influence sur la destruction de ce dernier. Ils servent principalement à s'affranchir du problème des références circulaires.

