为什么没有在fill_n中调用移动构造函数
问题描述:
我得到的错误说下面的fill_n
行试图使用删除的复制构造函数:为什么它不试图使用移动构造函数?我试图把它包装在std::move
中,但这没有帮助。为什么没有在fill_n中调用移动构造函数
std::vector<std::thread> workers;
workers.reserve(10);
std::fill_n(std::back_inserter(workers), 10, std::thread([]{ std::cout << "thread\n"; }));
但是,如果我改变fill_n
线
for(int i = 0; i < 10; ++i)
{
workers.push_back(std::thread([]{ std::cout << "thread\n"; }));
}
工作正常。我认为这些基本上和我之前在一些类似的代码中做过的改变一样。
答
上线
std::fill_n(std::back_inserter(workers), 10, std::thread([]{ std::cout << "thread\n"; }));
有创造了单暂时std::thread
实例,fill_n
尝试,使这10份填写workers
。你不能移动一个对象,使许多副本 - 它只是没有任何意义。
你想要的是可能std::generate_n
:
std::generate_n(std::back_inserter(workers), 10, [] {
return std::thread([] { std::cout << "thread\n"; });
});