У меня есть класс 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() {};
Конечно, не работает, потому что компилятор запрашивает конструктор переноса.
Я не уверен, как добиться того же дляперевод.
Это правильное решение?Есть ли лучшее решение?
Помощь приветствуется.