std :: thread并在visual studio 2013中移动

时间:2014-03-05 09:23:05

标签: c++ multithreading move

我有一个只能移动的类和一个按值获取此类对象的函数。 函数在新线程中调用:

void foo(MyClass a) {}

int main()
{
   MyClass a;
   std::thread t(&foo, std::move(a));
}

我收到编译器错误,因为MyClass缺少复制构造函数(我删除了他),如果我实现了他,则会调用复制构造函数。

显然这是一个bug,它在gcc中没有copy-constructor编译。 有没有解决方法?

1 个答案:

答案 0 :(得分:2)

如果该方法需要a的所有权,请将其传递给堆,最好是shared_ptr

void foo(std::shared_ptr<MyClass> a) {}
 [...]

auto a_ptr = std::make_shared<MyClass>();
std::thread t(foo, a_ptr);

否则只需通过引用传递:

void foo(MyClass& a) {}
 [...]

MyClass a;
std::thread(foo, std::ref(a));