实例化std :: mutex时编译器错误

The*_*ere 3 c++ mutex std deleted-functions c++11

我在代码库中广泛使用了std :: mutex.但是,其中一个类只是不允许我在其实例变量列表中添加互斥锁.我正在使用以下内容简单地实例化互斥锁 -

std::mutex myMutex;
Run Code Online (Sandbox Code Playgroud)

我将上述语句添加到类成员列表的私有部分.

我收到以下错误 -

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'
Run Code Online (Sandbox Code Playgroud)

我试图添加互斥锁的类被复制.

正如我所说的,我在我的代码库中使用了互斥锁,所以我可以在一个地方实例化互斥锁,而我可以在所有其他地方实例化,这是非常奇怪的.你能告诉我这里出了什么问题吗?

add*_*aon 6

您正在std::mutex使用复制构造函数将类添加到类中.最有可能的是,您的类具有正在使用的默认复制构造函数.默认的复制构造函数在类中的每个成员上调用复制构造函数.但是std::mutex,通过规范删除了复制构造函数 - 它是一个不可复制的类型.