9

尝试使简单的代码工作:

std::thread threadFoo;

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

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

收到错误:

使用已删除的函数 'std::thread& std::thread::operator=(const std::thread&)'

我明确定义threadBar为右值引用,而不是普通的。为什么没有调用预期的运算符?如何将一个线程移动到另一个线程?

谢谢!

4

2 回答 2

16

命名引用是左值。左值不绑定到右值引用。你需要使用std::move.

threadFoo = std::move(threadBar);
于 2013-07-16T10:29:52.510 回答
1

另请参阅std::thread::swap。这可以实现为

std::thread threadFoo;
std::thread threadBar = std::thread(threadFunction);
threadBar.swap(threadFoo);
于 2018-04-24T14:20:14.553 回答