Avec l'avènement de l' std::unique_ptr
, les imperfections std::auto_ptr
peuvent enfin être mis au repos. Donc, depuis quelques jours, j'ai changé mon code pour utiliser des pointeurs intelligents et d'éliminer tous delete
de mon code.
Bien que valgrind me dit que mon code est en mémoire propre, la richesse sémantique des pointeurs intelligents contribueront à rendre plus simple et plus facile à comprendre le code.
En plus du code, la traduction est simple: utiliser std::unique_ptr
de en lieu de la première pointeurs tenu par la possession d'objets, jetez delete
, et soigneusement saupoudrer get()
, reset()
et move()
des appels, en tant que de besoin, à l'interface bien avec le reste du code.
J'en suis au point où je suis la traduction de la non-possession d'raw pointeurs de pointeurs intelligents maintenant.
Depuis que j'ai été prudent avec la durée de vie de mes objets (je m'assurer que mes modules dépendent dans une seule direction), valgrind me dit que je n'ai pas non initialisée lit, balançant des pointeurs ou des fuites. Donc, techniquement, je pourrais juste laisser les non-possesseurs d'un raw pointeurs seul maintenant.
Toutefois, une option est de changer les non-possesseurs d'un raw pointeurs d' std::shared_ptr
parce que je sais qu'ils sont acycliques. Ou, serait-il mieux de les laisser brutes des pointeurs?
J'ai besoin de quelques conseils de la part du vétéran utilisateurs de smart pointeurs à ce que les règles de base que vous utilisez pour décider de conserver non propriétaire raw pointeurs comme-est, ou de les traduire en std::shared_ptr
, en gardant à l'esprit que j'ai constamment des tests unitaires et valgrind mon code.
EDIT: j'ai peut-être l'incompréhension de l'utilisation de std::shared_ptr
- peuvent-ils être utilisés en conjonction avec d' std::unique_ptr
, ou bien, est-ce que si j'utilise std::shared_ptr
,, toutes les poignées doivent également être std::shared_ptr
?