我有一个类Handler:
class Handler {
private:
std::mutex _mutex_list[4];
std:list<Person*> _waiting_list[4];
std::thread __runner_t;
public:
virtual void start();
};
我试图在一个新线程中启动处理程序:
Handler* handler = new Handler();
std::thread(&Handler::start, handler);
问题是显然std :: thread需要类的传递构造函数,我无法将其定义为默认值,因为无法复制std :: mutex。
我定义了一个自定义复制构造函数,它只复制列表但重新初始化互斥锁数组和线程。
这里是:
Handler(const Handler& other) :
_mutex_list(), _waiting_list(other._waiting_list), _runner_t() {};
当然不起作用,因为编译器要求传输构造函数。
我不确定如何实现相同的转移。
这是正确的解决方案吗?有更好的解决方案吗?
感谢帮助。
没有transfer
构造函数,有移动构造函数。您的代码有一个逻辑问题 - 您正在创建一个线程,并且您正在将对象复制到其中,但此对象拥有该线程,这是错误的。
我会说,如果你有一个拥有线程的对象,运行这个线程应该是它自己的函数,如:
class Handler {
...
void start() {
__runner_t = std::thread(&thread_func, this);
}
};
您可以解决的技术编译错误突出了逻辑问题。