元の質問:
答え:
はい、最初の 2 つの質問は正確です。 std::shared_ptr の参照カウントとデストラクターの呼び出しはスレッドセーフです。
3 番目の質問も正解です。 std::shared_ptr は、その中に格納されているオブジェクトのスレッドの安全性を保証しません。オブジェクト自体はスレッドセーフではない可能性があるため、適切な同期を行わずに複数のスレッドからオブジェクトにアクセスすると、未定義の動作が発生する可能性があります。
例:
次のことを考慮してください。疑似コードの一部:
// 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));
これは、reset() が同じオブジェクトへの他のスレッドの参照に影響を与えないためです。 d は新しいインスタンスを指す唯一の共有ポインタですが、他の参照 (a、b、c) は元のインスタンスを指し続けます。
以上がstd::shared_ptr は、管理するオブジェクトに対してスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。