【发布时间】:2021-01-07 21:06:00
【问题描述】:
所以根据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,但复制构造函数不存在(如顶部的sn-p所示,它不会编译) .
那么第二个sn-p到底发生了什么?
【问题讨论】:
-
你熟悉移动语义吗?如果没有,请参阅What is move semantics?
-
由于
t1 = std::thread();中等号的左侧是现有变量,而不是声明,您应该考虑assignment 而不是construction。 (从某种意义上说,这并不重要,因为复制分配也被删除了。因此这是一个评论,而不是一个答案。)