Maison >développement back-end >C++ >std::shared_ptr peut-il être utilisé pour un nettoyage fiable à l'arrêt ?
std::shared_ptr
std::shared_ptr, introduit dans C 11, fournit un moyen de gérer des objets alloués dynamiquement avec une propriété partagée. Cependant, un cas d'utilisation intrigant a émergé utilisant std::shared_ptr
L'exemple de travail
Considérez l'extrait de code suivant :
<code class="cpp">#include <memory> #include <vector> class Test { public: Test() { std::cout << "Test created" << std::endl; } ~Test() { std::cout << "Test destroyed" << std::endl; } }; int main() { std::vector<std::shared_ptr<void>> v; { v.push_back(std::shared_ptr<Test>(new Test())); } return 0; }</code>
Étonnamment, ce code affiche :
Test created Test destroyed
Cela suggère que l'objet Test est détruit correctement même s'il est détenu par un std::shared_ptr
Le mécanisme sous-jacent
std::shared_ptr fournit l'effacement de type, séparant le type de l'objet géré de l'implémentation. En interne, il stocke une fonction de suppression qui appelle le destructeur approprié en fonction du type de l'objet d'origine.
Lorsqu'un std::shared_ptr
Conformité et fiabilité standard
Bien que le comportement décrit fonctionne actuellement, il repose sur les détails d'implémentation et est non garanti par la norme C. Cela est dû à deux raisons :
Par conséquent, l'utilisation de std::shared_ptr
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!