Я широко использовал std :: mutex в своей кодовой базе. Однако один из классов просто не позволяет мне добавить мьютекс в список переменных его экземпляра. Я просто создаю экземпляр мьютекса, используя следующее:
std::mutex myMutex;
Я добавил вышеупомянутое утверждение в закрытый раздел списка участников класса.
Я получаю следующую ошибку —
error C2280: 'std::mutex::mutex(const std::mutex &)' : attempting to reference a deleted function
1> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\mutex(113) : see declaration of 'std::mutex::mutex'
Класс, который я пытаюсь добавить, мьютекс копируется.
Как я уже сказал, я использовал мьютекс во всей моей кодовой базе, поэтому очень странно, что я не могу создать экземпляр мьютекса в одном месте, в то время как я могу создать экземпляр во всех других местах. Подскажите, пожалуйста, что здесь не так?
Вы добавляете std::mutex
в класс с конструктором копирования. Скорее всего, ваш класс имеет конструктор копирования по умолчанию, который используется. Конструктор копирования по умолчанию вызывает конструктор копирования для каждого члена класса. Но std::mutex
Конструктор копирования удалён, по спецификации — это не копируемый тип.