C++ 简单线程池

C++ Simple Thread Pool

我正在尝试用 C++ 实现一个简单的线程池,如下所示:

class worker {
public:
    worker();
    thread mThread;
private:
    void run();
};

worker::worker() {
    (this->mThread = thread(&worker::run, this)).detach();
}

class threadpool {
public:
    threadpool(int size);
    void addTask();
private:
    vector<worker> workers;
};

但是当我添加线程池的构造函数时:

threadpool::threadpool(int size) {
    this->workers = vector<worker>(size, worker());
}

我收到一个 "attempting to reference a deleted function" 错误,据我所知,这意味着我在代码中的某处试图复制一个线程。有什么办法可以解决这个问题吗?

最小可能的变化是:

threadpool::threadpool(int size) {
    this->workers = vector<worker>(size);
}

也就是说,初始化列表很不错。

threadpool::threadpool(int size)
  : workers{size}
{ }

(你 应该 int size 变为 size_t 或者 - 如果你感觉圣洁 - vector<worker>::size_type)。

提供原型 worker() 对象请求复制,其隐式构造函数已删除,因为您提供了显式默认构造函数。