Quelles sont les utilisations recommandées d'un std::unique_ptr
pour savoir précisément où, quand et comment est-il le mieux utilisé?
J'ai découvert:
À propos des performances unique_ptr
Je sais déjà:
std::unique_ptr
a été développé en C++ 11 en remplacement de std::auto_ptr
std::unique_ptr
n'a pas de comptage de références et "possède" l'objet vers lequel il pointestd::unique_ptr
std::unique_ptr
est la structure de référenceCe que j'aimerais savoir:
std::unique_ptr
toujours préférable (autre que l'unicité) à quelque chosestd::unique_ptr
moins favorablestd::shared_ptr
suffirait pour une gestion dynamique de la mémoire dans presque toutes les situations, pourquoi avoir à ma disposition un std::unique_ptr
matière (encore une fois, autreEn théorie, vous devez utiliser unique_ptr
pour tous les pointeurs, sauf si vous savez que vous souhaitez le partager, auquel cas vous devez utiliser shared_ptr
. La raison en est que unique_ptr
a moins de frais généraux car il ne compte pas les références.
Cependant, un unique_ptr
est mobile mais pas copiable, donc en utiliser une comme variable membre peut vous obliger à écrire plus de code (par exemple un constructeur de déplacement), en passant un par valeur signifie que vous devrez utiliser std::move
etc. En conséquence, certaines personnes utilisent shared_ptr
par paresse, car c'est juste plus facile, et la différence de performance peut ne pas être importante pour leur application.
Enfin, un pointeur brut est parfait pour l'observation - des utilisations de pointeur qui ne peuvent jamais affecter la durée de vie. Un choix judicieux du bon type de pointeur peut donner à ceux qui lisent votre code une bonne compréhension de ce que vous faites. Pour en savoir plus, consultez l'essai de Herb Sutter, Elements of C++ Style , en particulier la section "no delete".