2

在以下代码中,对象“队列”是不可复制的,但由于 std::mutex 是可移动的。

std::generate_n(std::back_inserter(thread_pool),
                std::thread::hardware_concurrency,
                [&](){return std::thread(handler(), exiting, queue);});

由于互斥体上的私有复制构造函数,VC++2012 无法编译。无法为队列生成复制构造函数。为什么会有任何东西试图复制队列?在我看来,一切都是参考,因此没有副本。

4

1 回答 1

6

试图queue通过按值将其传递给std::thread构造函数来进行复制。如果您要传递引用,请使用包装器:std::ref(queue)

如果你真的想queue进入std::thread,你需要通过std::move(queue)使其成为右值。但是由于 VS 中的错误,它仍然无法正常工作。

于 2013-08-09T18:08:23.113 回答