Sont scoped_ptr<> et auto_ptr<> effectivement obsolète?
auto_ptr
est déconseillée en C++11, donc il n'y est une réponse. scoped_ptr
n'existe pas en C++11 et ne l'a jamais fait. La principale raison de l'utilisation boost::scoped_ptr
est de s'assurer que la propriété n'est jamais transféré (à moins que vous tentez de tricher, bien sûr). Et puis, si vous utilisez unique_ptr
, la propriété ne peut être transférée si vous utilisez std::move
ou d'autres constructions similaires. Ou, comme Howard points, il suffit de faire un const std::unique_ptr
.
Donc, c'est vraiment à vous de décider si vous voulez un peu plus d'assurance. Aussi boost::scoped_ptr
n'ont pas deleter soutien. Donc, unique_ptr
pouvez jouer des tours qu' boost::scoped_ptr
ne le peuvent pas.
std::weak<> avec parcimonie, uniquement quand il y a des cycles qui ont besoin d'être cassé
Je ne peux pas dire que je suis d'accord avec cette politique, nécessairement. Un weak_ptr
doit être utilisé lorsqu'un objet voudrez peut-être parler d'autre chose, mais elle n'est pas propre qu'autre chose. Ce qui signifie qu'il peut être supprimé à tout moment, et le titulaire de l' weak_ptr
doit être capable de gérer cette suppression à tout moment, il essaie de parler.
Briser le cycle est l'un des usages de l' weak_ptr
; il ne devrait pas être la seule fois qu'il est utilisé.