c++ - 仅移动类型的 back_inserter

标签 c++ c++11

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

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

VC++2012 由于互斥量上的私有(private)复制构造函数而无法编译。无法为队列生成复制构造函数。为什么会有任何东西试图复制队列?在我看来,一切都是引用,因此没有拷贝。

最佳答案

正在尝试通过将queue 按值传递给std::thread 构造函数来复制它。如果您打算传递引用,请使用包装器:std::ref(queue)

如果你真的想将queue移动到std::thread中,你需要将std::move(queue)传递给使它成为一个右值。它仍然无法正常工作,because of a bug in VS .

关于c++ - 仅移动类型的 back_inserter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152817/

相关文章:

c++ - 将字符串 vector 保存到磁盘不起作用

c++ - 如何更改静态文本控件(winapi)的字体?

c++ - 通过引用或值枚举类 C++11

c++ - 使用 any_of 找到的值在 lambda 外部的返回中使用

c++ - 如何在 YAML-CPP 中将版本字符串写为文字(而非字符串)?

java - 将特定线程绑定(bind)到特定处理器内核

c++ - 将多字节 ASCII 文字分配给枚举值

c++ - Foreach 等价于可变参数函数

c++ - 对于 CLang 中的 enable_if 错误(错误 11723)是否有更好的解决方法?

c++ - 在性能方面,使用 'nullptr' 还是仅使用 '0' 更快?