我有一个只有可移动的类和一个函数,它通过值获取此类的对象.
函数在新线程中调用:
void foo(MyClass a) {}
int main()
{
MyClass a;
std::thread t(&foo, std::move(a));
}
我得到一个编译器错误,因为MyClass缺少了复制构造函数(我删除了他),如果我实现了他,则会调用copy-constructor.
显然这是一个bug,它在gcc中没有copy-constructor编译.
有没有解决方法?
最佳答案 如果该方法需要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));