私はhttp://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.htmlを読んでいますが、いくつかのスレッドセーフティの問題はまだわかりません:
- 標準では、参照カウントがスレッドセーフで処理され、プラットフォームに依存しないことが保証されています。
- 同様の問題-標準では、1つのスレッド(最後の参照を保持している)のみが共有オブジェクトで削除を呼び出すことが保証されていますよね?
- 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));
スレッドIVでreset()を呼び出すと、最初のスレッドで作成されたAクラスの以前のインスタンスが削除され、新しいインスタンスに置き換えられますか?さらに、IVスレッドでreset()を呼び出した後、他のスレッドには新しく作成されたオブジェクトのみが表示されますか?
make_shared
代わりに使用してくださいnew