Contenu du cours
Pointeurs Intelligents C++
Pointeurs Intelligents C++
Qu'est-ce Que les Pointeurs Partagés ?
Les pointeurs partagés, définis comme std::shared_ptr
, sont un autre type de pointeur intelligent qui aide à la gestion automatique de la mémoire. Ils font partie de la bibliothèque standard C++ depuis C++11 et sont un concept fondamental que chaque développeur C++ devrait maîtriser.
Tout comme un pointeur unique, un pointeur partagé est utilisé pour allouer et conserver l'adresse d'un objet alloué dynamiquement. Le principal facteur de différenciation entre les deux types de pointeurs est qu'un pointeur partagé est partageable par conception. Il peut avoir en toute sécurité plus d'un propriétaire. En fait, il ne devrait être utilisé que lorsque vous avez besoin qu'un objet ait plusieurs propriétaires.
Comment fonctionnent les pointeurs partagés ?
Contrairement aux pointeurs uniques, les pointeurs partagés maintiennent un compteur de références. Le compteur de références d'un pointeur partagé suit le nombre de pointeurs partagés qui référencent (possèdent) actuellement le même objet.
Rappelez-vous
Créer un nouveau pointeur partagé pour un objet dynamique définit le compteur de références à 1. Ajouter un autre pointeur partagé augmente le compteur à 2, et ainsi de suite.
De même, lorsqu'un pointeur partagé sort de la portée ou est explicitement réinitialisé, le compteur de références est automatiquement décrémenté. Dès que le compteur de références atteint 0, cela signifie qu'aucun pointeur partagé ne référence plus l'objet, et la mémoire de l'objet est automatiquement désallouée.
C'est un moyen infaillible d'assurer une propriété partagée sécurisée des données dynamiques en C++. Car, même lors du partage de données, le programme est moins susceptible aux fuites/corruptions de mémoire, et vous n'avez pas besoin d'appeler manuellement delete
.
Un exemple du monde réel
Examinons un cas d'utilisation pratique des pointeurs partagés. Supposons que vous construisiez une application multimédia complexe qui traite de grandes images. Vous avez écrit des dizaines de classes C++ pour gérer efficacement l'analyse et le traitement des fichiers image. Chaque classe a besoin d'accéder aux mêmes données d'image.
La manière la plus sûre de procéder serait d'utiliser des pointeurs partagés. Ils garantiront que la mémoire est automatiquement libérée lorsque aucune des classes n'a plus besoin des données d'image.
Merci pour vos commentaires !