2011-09-03 107 views
2

我得到的错误说下面的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"; })); 
} 

工作正常。我认为这些基本上和我之前在一些类似的代码中做过的改变一样。

回答

7

上线

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"; }); 
}); 
相关问题