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

时间:2014-10-13 23:09:50

标签: c++ c++11 mutex std deleted-functions

我在代码库中广泛使用了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'

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

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

1 个答案:

答案 0 :(得分:6)

您正在使用复制构造函数向类中添加std::mutex。最有可能的是,您的类具有正在使用的默认复制构造函数。默认的复制构造函数在类中的每个成员上调用复制构造函数。但是std::mutex的复制构造函数被删除了,因为它是一个不可复制的类型。