std::vector<std::thread> thread_pool;
...
std::generate_n(std::back_inserter(thread_pool), cpu_cores,
[](){
//...
return std::thread{worker(worker_name) };
});
其中:std :: generate_n算法需要複製ctor。如何避免在下面的代碼中?
class worker {
std::atomic_bool done;
protected:
void operator()() {
while(!done) {
// some work
}
}
public:
worker(const std::string& worker_name)
: done(false) {
// some initialization
}
// other fields
};
error: use of deleted function 'std::atomic_bool::atomic_bool(const std::atomic_bool&)'
GCC 4.9
,我看到原子不能被複制,剛搬來。上面的代碼需要爲some_object類複製ctor。 如何解決這個問題?
(可能是設計本身更糟糕的是, 這裏,some_object是一個線程函子,而原子是關閉的過程中下一個標誌)
您可以創建一個'back_emplacer'(參見,例如,http://stackoverflow.com/questions/ 18728257/back-emplacer-implementation-default-operator-vs-universal-reference-version) – Andrew
您能否提供[最小,完整和可驗證的示例](http://www.stackoverflow.com/help/mcve)?問題可能出現在你的「...」某處。 'some_object'是可移動的嗎? – Barry
什麼編譯器?上述代碼的哪一行是在抱怨拷貝文件被調用?實際的錯誤信息是什麼?你爲什麼認爲「上面的代碼」需要「複製ctor」? – Yakk