Contenu du cours
Pointeurs Intelligents C++
Pointeurs Intelligents C++
Application for Pointeurs Uniques
Les pointeurs uniques offrent un moyen sûr d'initialiser la mémoire de tas limitée à la portée. Voici quelques scénarios dans lesquels les pointeurs uniques sont bien adaptés :
-
comme règle d'or, définissez tous les pointeurs comme des pointeurs uniques, sauf s'ils doivent être partagés. Cela garantit une empreinte mémoire globale plus faible de votre application, car les pointeurs uniques ne comptent pas les références ;
-
utilisez des pointeurs uniques lorsque vous traitez de la mémoire de tas qui doit être allouée lors de l'entrée dans une portée, et désallouée lors de la sortie de la portée. Par exemple, vous pouvez utiliser un pointeur unique pour créer un grand vecteur d'objets dynamiques temporaires à l'intérieur d'une fonction ;
-
vous pouvez également utiliser des pointeurs uniques pour gérer des ressources telles que des descripteurs de fichiers, des sockets et des connexions de base de données. Ils garantissent que la ressource pointée est libérée lorsque le pointeur sort de la portée, réduisant ainsi les risques de fuites de ressources ;
-
les pointeurs uniques sont également bien adaptés à la création de structures de données complexes comme des arbres ou des listes doublement chaînées. En imposant la propriété unique de chaque élément dans la structure, ils peuvent simplifier la gestion de la mémoire et du code.
Quand ne pas utiliser des pointeurs uniques
Cependant, il existe certains scénarios où les pointeurs uniques ne sont pas le meilleur choix. Voyons-en quelques-uns :
-
si votre programme nécessite que plusieurs pointeurs partagent la propriété d'une ressource, alors vous ne pouvez pas utiliser un pointeur unique ;
-
si vous souhaitez que plusieurs parties de votre programme accèdent à une ressource partagée, vous ne devriez pas utiliser un pointeur unique pour gérer cette ressource. Bien qu'il soit possible de transmettre le pointeur brut (d'un pointeur unique) à différentes parties de votre code, cela briserait le principe fondamental de la propriété unique et pourrait potentiellement entraîner des fuites/corruptions de mémoire ;
-
si vous travaillez avec du code hérité ou des packages tiers qui ne prennent pas en charge les pointeurs intelligents, vous devrez peut-être vous fier à des pointeurs bruts, ou à d'autres moyens de gérer la mémoire.
Merci pour vos commentaires !