std::unique_ptr
est la façon C++11 d'exprimer la propriété exclusive, mais l'une de ses caractéristiques les plus attrayantes est la conversion facile et efficace en une propriété exclusive. l'une de ses caractéristiques les plus attrayantes est qu'elle se convertit facilement et efficacement en une méthode d'expression de la propriété exclusive. std::shared_ptr
.
C'est une des raisons principales pour lesquelles std::unique_ptr
est si bien adapté comme type de retour de fonction d'usine. Les fonctions d'usine ne peuvent pas savoir si les appelants voudront utiliser la sémantique de propriété exclusive pour l'objet qu'elles retournent ou si la propriété partagée (c'est-à-dire, std::shared_ptr
) serait plus approprié. En renvoyant un std::unique_ptr
Les usines de production d'énergie fournissent aux appelants le pointeur intelligent le plus efficace, mais elles n'empêchent pas les appelants de le remplacer par son frère plus flexible.
std::shared_ptr
a std::unique_ptr
n'est pas autorisé. Une fois que vous avez confié la gestion de la durée de vie d'une ressource à une équipe de gestion des ressources. std::shared_ptr
il n'est pas possible de changer d'avis. Même si le nombre de références est de un, vous ne pouvez pas récupérer la propriété de la ressource afin, par exemple, d'avoir un std::unique_ptr
le gérer.
Référence : Effective Modern C++. 42 FAÇONS SPÉCIFIQUES D'AMÉLIORER VOTRE UTILISATION DE C++11 ET C++14. Scott Meyers.
En bref, vous pouvez facilement et efficacement convertir une std::unique_ptr
a std::shared_ptr
mais vous ne pouvez pas convertir std::shared_ptr
a std::unique_ptr
.
Par exemple :
std::unique_ptr<std::string> unique = std::make_unique<std::string>("test");
std::shared_ptr<std::string> shared = std::move(unique);
ou :
std::shared_ptr<std::string> shared = std::make_unique<std::string>("test");
0 votes
Définissez la notion de "sécurité", s'il vous plaît. Quel type de sécurité recherchez-vous ? La sécurité de la gestion de la durée de vie ? Sécurité du fil ?
2 votes
"STL" ne signifie pas bibliothèque standard. La STL n'a rien à voir avec
shared_ptr
.1 votes
@jaggedSpire La sécurité des threads signifie que les propriétaires sont utilisés dans différents threads, c'est-à-dire que le nombre d'utilisations n'est pas égal à 1.
0 votes
@curiousguy Je le savais. Ce que je voulais dire, c'est que la "sécurité" n'était pas bien définie dans la question du PO et qu'il devait préciser de quel type de "sécurité" il s'agissait, car il en existe plusieurs.