gpt4 book ai didi

c++ - std::generate_n 算法需要复制 ctor。如何在下面的代码中避免这种情况?

转载 作者:行者123 更新时间:2023-11-30 01:13:06 27 4
gpt4 key购买 nike

    std::vector<std::thread> thread_pool;
...
std::generate_n(std::back_inserter(thread_pool), cpu_cores,
[] (){
//...
return std::thread{worker(worker_name) };
} );

哪里:

  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&)'

海湾合作委员会 4.9

正如我所见,atomic 无法复制,只能移动。上面的代码需要为 some_object 类复制 ctor。如何解决这个问题?

(可能是设计本身比较糟糕,这里,some_object 是线程的仿函数,atomic 是关闭进程的标志)

最佳答案

你的类(class):

class worker {
std::atomic_bool done;
};

不可复制或移动,因为 std::atomic 显式 delete 其复制构造函数(隐式 delete 其移动构造函数)。如果你想让它被移动或复制,你必须自己写,例如:

worker(worker&& rhs)
: done(rhs.done.load())
{ }

关于c++ - std::generate_n 算法需要复制 ctor。如何在下面的代码中避免这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32869601/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com