Dois-je utiliser shared_ptr ou unique_ptr

J'ai fait quelques objets à l'aide de la pimpl idiome, mais je ne suis pas sûr que d'utiliser std::shared_ptr ou std::unique_ptr.

Je comprends que std::unique_ptr est plus efficace, mais ce n'est pas tellement un problème pour moi, car ces objets sont relativement lourds, de sorte que les coûts de std::shared_ptr sur std::unique_ptr est relativement mineur.

Je suis actuellement en cours avec std::shared_ptr juste à cause de la plus grande flexibilité d'utilisation. Par exemple, à l'aide d'un std::shared_ptr me permet de stocker ces objets dans une table de hachage pour un accès rapide tout en étant capable de retourner les copies de ces objets pour les appelants (comme je le crois, tout itérateurs ou références peuvent rapidement devenir invalide).

Cependant, ces objets ne sont vraiment pas être copié, que les modifications portent sur l'ensemble des copies, donc je me demandais que peut-être l'aide d' std::shared_ptr et permettant des copies est une sorte d'anti-modèle ou une mauvaise chose.

Est-ce correct?

  • À l'aide de l'une ou l'autre change profondément la sémantique de copie que vous donnez à vos objets. Il y a utilise pour les deux. Je dirais que le plus idiomatique dans le C++ monde est unique_ptr, mais l'objet qui partagent un implémentations ont à leur utilisation, en particulier si vous êtes l'écriture de "l'étranger" de code (par exemple. COM, C++/CLI), ou si la classe ressemble vraiment à un "type de référence".
  • Question similaire: stackoverflow.com/questions/311166/...
  • La manière recommandée en C++11 est à usage unique, après tout, vous n'avez pas besoin de copier ou partager l'application avec n'importe qui. Aussi unique_ptr est plus rapide au moment de l'exécution.
InformationsquelleAutor Clinton | 2011-04-07