C++-我如何能够为std::thread调用复制构造函数?
所以根据https://en.cppreference.com/w/cpp/thread/thread/thread:复制构造函数std::thread被删除,这是我不能做的原因(导致编译错误):
std::thread t1;
std::thread t2 = t1;
但是我不知何故能够做到:
std::thread t1;
t1 = std::thread();
我的印象是,上面的代码创建了一个临时std::thread对象并将其复制到其中,t1但复制构造函数不存在(如未编译的顶部代码段所示)。
那么在第二个片段中到底发生了什么?
回答
第二个使用移动分配。std::thread可以移动,但不能复制。
这也应该有效: std::thread t2 = std::move(t1); ,它将t2管理t1正在管理的任何线程,并且t1将为空。