在下面的代码中,对象'queue'是不可复制的,但由于std :: mutex而可以移动。
std::generate_n(std::back_inserter(thread_pool),
std::thread::hardware_concurrency,
[&](){return std::thread(handler(), exiting, queue);});
由于互斥锁上的私有拷贝构造函数,VC ++ 2012无法编译。它无法为队列生成复制构造函数。为什么要尝试复制队列?在我看来,一切都是通过引用来获取它,因此没有副本。
答案 0 :(得分:6)
您正在尝试通过将值queue
传递给std::thread
来复制std::ref(queue)
。如果您要传递引用,请使用包装器:queue
。
如果您确实想将std::thread
移到std::move(queue)
,则需要传递{{1}}以使其成为右值。但它仍然无效,because of a bug in VS。