3

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

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

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

4

1 回答 1

6

您正在std::mutex使用复制构造函数将 a 添加到类中。很可能,您的类有一个正在使用的默认复制构造函数。默认复制构造函数调用类中每个成员的复制构造函数。但是std::mutex,按照规范,它的复制构造函数被删除了——它是一种不可复制的类型。

于 2014-10-14T01:30:22.810 回答