スレッドコールバック関数の引数としてオブジェクトを渡さなければならない状況があります。オブジェクトは動的に作成され、スレッドに渡された後、そのコンテキスト(スレッドを開始するメソッド)ではオブジェクトは不要/使用されなくなります。スレッド関数は、オブジェクトを所有する必要がある唯一のコンテキストになりました。
(スレッドに生のポインターを渡す代わりに)Boostスマートポインターを使用したいとすると、ここで最も適切なものはどれですか?この場合のベストプラクティスは何ですか?
私が実際に必要とstd::auto_ptr
しているのは、コピーコンストラクターを介した移動セマンティクスです。このスマートポインターはここに完全に適合すると思いますが、よく知られている理由で非推奨になっています(そしてtr1
、ポインターを信頼することはできません。このコードはVisualで両方をコンパイルする必要があるプロジェクト間で共有されるため、 BoostC++11
のみを使用する必要があります(そして使用したい)。Studio 2008および2010)。
boost::shared_ptr
オプションです-私はそれを価値で渡すことができますが、それはやり過ぎだと思います。移動セマンティクスを(安全な方法で)エミュレートする可能性はありますboost::scoped_ptr
か?2つのコンテキスト間でオブジェクトを共有していないため、ここで参照カウントする必要はありません。オブジェクトの所有権を1つのコンテキストから別のコンテキストに転送したいだけです。