5

コード作業のメイクシンプルな作品をしよう:移動のstd ::スレッド

std::thread threadFoo; 

std::thread&& threadBar = std::thread(threadFunction); 

threadFoo = threadBar; // thread& operator=(thread&& other); expected to be called 

エラーを取得:

use of deleted function 'std::thread& std::thread::operator=(const std::thread&)'

私は明示的に右辺値参照ではなく、通常のものとしてthreadBarを定義します。なぜ期待されたオペレータが呼び出されていないのですか?スレッドを別のスレッドに移動するにはどうすればよいですか?

ありがとうございました!

答えて

12

は参考値です。左辺値は右辺値参照にバインドされません。 std::moveを使用する必要があります。

threadFoo = std::move(threadBar); 
+0

ありがとうございました。 '' threadFoo = std :: thread(threadFunction); 'のような一時的なスレッドオブジェクトを使って、期待される演算子を使うことができます。 – Kolyunya

+1

'std :: move'から取得した一時的な参照または名前のない参照です。 –

+0

説明をありがとう! – Kolyunya

関連する問題