183 个问题
你好
std::mutex 是不可复制的。因此,包含它的 Foo 类变得不可复制。您正在将一个临时的 Foo 对象传递给 std::future,并且您可能希望在所有线程中使用相同的对象。我建议您可以使用 std::ref 来传递对现有对象的引用。
代码如下:
#include <iostream>
#include <future>
struct Foo
{
int compute()
{
return 123;
}
// === UNCOMMENT THE LINE BELOW TO SHOW THE ERROR ===
std::mutex the_mutex;
};
int main()
{
Foo foo;
std::cout << "result: " << foo.compute() << std::endl;
std::future<int> f = std::async(std::launch::async, &Foo::compute, std::ref(foo));
std::cout << "result: " << f.get() << std::endl;
return 0;
}
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。