Sha*_*yan 6 c++ move c++11 stdthread
考虑这个方案,基本上创建std::thread调用该函数func()以arg作为参数:
#include <thread>
#include <iostream>
struct foo {
foo() = default;
foo(const foo&) { std::cout << "copy ctor" << std::endl; }
foo(foo&&) noexcept { std::cout << "move ctor" << std::endl; }
};
void func(foo){}
int main() {
foo arg;
std::thread th(func, arg);
th.join();
}
Run Code Online (Sandbox Code Playgroud)
我的输出是
copy ctor
move ctor
move ctor
Run Code Online (Sandbox Code Playgroud)
据我了解arg是在线程对象内部复制,然后func()作为右值传递给(移动)。所以,我期望一个副本构造和一个移动构造。
为什么要进行二次施工?