移动语义
在讨论转移线程所有权之前,先来看之前提到的例子:
之前我们说到,向线程过程函数传递参数,是值传递,如果想改为引用传递,那么改为:
std::thread t1(func, std::ref(str));
现在考虑一个问题,假如 str 不会再在主线程中使用了,为了避免数据竞争或者说无用的空间占用,我们可以使用移动语义来将 str 的所有权从主线程移动到子线程,然后去执行 func 函数
std::thread t1(func, std::move(str));
此时,如果再输出 str 的值,那么应当为空
可