在下面的代码中,我无法理解为什么移动构造函数的类被调用两次,因为我的线程函数正在通过rvalue引用获取参数,所以我希望当参数被移动到线程构造函数时,移动构造函数只会被调用一次。有人可以深入了解线程构造函数的工作方式以及它如何将参数传递给线程函数。
#include <iostream>
#include <thread>
#include <chrono>
class Test {
public:
Test() {}
Test(Test&&)
{
std::cout<<"Move Constructor Called..."<<std::endl;
}
};
void my_thread_func(Test&& obj)
{
using namespace std::chrono_literals;
std::cout<<"Inside thread function..."<<std::endl;
std::this_thread::sleep_for(2s);
}
int main() {
std::thread t(my_thread_func,Test());
std::cout << "Hello World!\n";
t.join();
return 0;
}
这个问题并不关心线程构造函数参数是否按值传递,而是更关心为什么移动构造函数被调用两次?