Pointeur intelligent

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

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++[modifier | modifier le code]

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.

Les unique_ptr forcent la propriété unique d'un objet en mémoire. Il est cependant possible de transférer cette propriété. Lorsque l'objet possédant le unique_ptr devient hors de portée, l'objet pointé est également détruit.

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

Les weak_ptr ont les mêmes propriétés que les shared_ptr, sauf qu'en plus ils permettent de s'affranchir du problème des références circulaires.