在下面的代码中,对象“队列”是不可复制的,但由于 std::mutex 而可以移动。
std::generate_n(std::back_inserter(thread_pool),
std::thread::hardware_concurrency,
[&](){return std::thread(handler(), exiting, queue);});
由于互斥体上的私有复制构造函数,VC++2012 无法编译。无法生成队列的复制构造函数。为什么会有东西试图复制队列?在我看来,一切都是参考的,因此没有副本。
You正在尝试复制queue
通过将其按值传递给std::thread
构造函数。如果您想传递引用,请使用包装器:std::ref(queue)
.
如果你真的想搬家queue
进入std::thread
,你需要通过std::move(queue)
使其成为右值。虽然这样还是不行因为VS的一个bug https://stackoverflow.com/questions/16712038/using-stdmove-to-send-a-stdunique-ptr-to-stdthread-in-vs1012.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)