2011-09-03 110 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"; }); 
}); 
相關問題