Envoyé par
Emmanuel Deloget
Sur le sujet des pointeurs intelligents : il y a une confusion étrange sur le fait qu'il soient utiles, même en C++ (pas d'offense, screetch, hein ? :)). Un pointeur intelligent gère la durée de vie d'une instance à la place du programmeur.
Plusieurs raisons peuvent pousser à l'adoption de smart pointers:
1) la flemme : le programmeur n'a pas envie de gérer lui même la durée de vie de son instance. Je comprends tout à fait que la flemme soit à la base même de notre métier, mais il y a peut-être des limites à ne pas dépasser :) En tout cas, ce n'est pas une bonne raison.
2) le programmeur n'a pas pris la peine de designer correctement son application, et il n'a pas pu déterminer la durée de vie de l'instance : c'est une erreur de sa part, qu'il cache par une sur-utilisation des pointeurs intelligents. C'est mauvais, très mauvais.
3) le programmeur n'a aucun moyen de déterminer la durée de vie de l'instance : je n'ai jamais rencontré ce cas, mais je veux bien croire qu'il existe. Avec un bémol toutefois : un programme est censé être prédictif, et par conséquent, démontrable. Dans ce cadre, je ne vois pas bien par quel étrange phénomène le comportement de l'instance deviendrait non prédictif.
4) le programmeur ne sait pas qui possède l'instance : l'instance est partagée par plusieurs objets, et le programmeur n'a pas défini celui qui en était responsable. Pour pallier à ce défaut, on permet à chacun des objets de détruire l'instance en question dès lors qu'il détecte qu'elle n'est plus utilisée. C'est bancal au mieux, catastrophique (au niveau design) au pire.
5) la possession évolue : la possession est passée à un objet, puis à un autre, etc. Afin de ne pas avoir à tracer cette possession, on utilise un pointeur intelligent. C'est à la limite de la fainéantise exagérée.