の使用結合する方法:AsyncOperation
と私はこれよりも頻繁ような何かをする必要があるのstdとのstd ::バインド:: shared_ptrの
AsyncOperation * pAsyncOperation = new AsyncOperation();
auto bindOperation = std::bind(&AsyncOperation::operator(), std::ref(*pAsyncOperation));
std::thread thread(bindOperation);
thread.join();
もファンクタとして知られているoperator()
を実装するカスタムクラス(であることをまたは関数オブジェクト)。
std::bind
にstd::ref
の代わりにstd::shared_ptr
を使用することはできますか? pAsyncOperation
の参照を保持する必要なくメモリリークを防ぎ、スレッドの最後にAsyncOperation
を自動的に削除します。つまり、この非同期タスクが終了します。
編集:私はいつもstd :: threadにアクセスするとは限りません。スレッドライブラリはboost :: threadや他のプラットフォームに依存するスレッドでもあります。結果として、std :: asyncへのアクセスではありません。
私の主な問題は、std :: bindに所有権を持つことです。
あなたは 'のstd :: shared_ptr'を使用しようとしたことがありますか?問題なしでコンパイルしているようです:http://liveworkspace.org/code/1e83d9698703711b7ed2ce0d44cf86f2 – PiotrNycz
あなたが知る必要があるのは、 'std :: bind'はバウンド引数を値渡し(つまり渡された)ポインタを値の1つとして値として渡すと、そのポインタは結果の関数に 'コピー'され、元の 'shared_ptr'が有効範囲外になった後でも所有権を保持します。 – haelix