尝试使用简单的代码:
std::thread threadFoo;
std::thread&& threadBar = std::thread(threadFunction);
threadFoo = threadBar; // thread& operator=( thread&& other ); expected to be called
收到错误:
使用已删除的函数'std :: thread&的std ::螺纹::运算符=(const的 的std ::螺纹&安培)'
我明确地将threadBar
定义为右值引用,而不是普通引用。为什么没有预期的操作员被调用?如何将一个线程移动到另一个线程?
谢谢!
答案 0 :(得分:13)
命名引用是左值。左值不绑定到右值参考。您需要使用std::move
。
threadFoo = std::move(threadBar);
答案 1 :(得分:0)
另见std::thread::swap
。这可以实现为
std::thread threadFoo;
std::thread threadBar = std::thread(threadFunction);
threadBar.swap(threadFoo);