Questions originales :
Réponses :
Oui, les deux premières questions sont exactes. Le comptage de références de std::shared_ptr et l'invocation du destructeur sont thread-safe.
La troisième question est également correcte. std::shared_ptr ne garantit pas la sécurité des threads pour l'objet qui y est stocké. L'objet lui-même peut ne pas être thread-safe et, par conséquent, y accéder à partir de plusieurs threads sans synchronisation appropriée pourrait entraîner un comportement indéfini.
Exemple :
Considérez ce qui suit morceau de pseudocode :
// Thread I shared_ptr<A> a (new A (1)); // Thread II shared_ptr<A> b (a); // Thread III shared_ptr<A> c (a); // Thread IV shared_ptr<A> d (a); d.reset (new A (10));
Cela est dû au fait que reset() n'affecte pas les références des autres threads au même objet. d est le seul pointeur partagé qui pointera vers la nouvelle instance, tandis que les autres références (a, b et c) resteront pointant vers l'instance d'origine.
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!