Use*_*123 3 c++ mutex class member
我在将互斥锁传递给我的班级时遇到问题。我有一个Test名为m_Mutex. 在构造函数中,我想将参数互斥体传输到m_Mutex.
我的课:
#include <mutex>
class Test
{
public:
Test(mutex &mtx) :
m_Mutex(mtx)
{
}
private:
mutex m_Mutex;
};
Run Code Online (Sandbox Code Playgroud)
我的主要:
int main()
{
mutex mutex1;
Test t(mutex1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误:
函数“std::mutex::mutex(const std::mutex &)”(在“c:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11 的第 88 行声明。 25503\include\mutex") 不能被引用——它是一个被删除的函数
为什么我会收到这个错误,我该如何修复它才能传递互斥锁?
简而言之:你不能。互斥体既不可复制也不可移动。他们不是有充分的理由。但是,如果您想实现这一点,您可以使用 unique_ptr 传递它:
class A {
unique_ptr<mutex> mutexPtr;
A(unique_ptr<mutex> ptr) : mutexPtr(std::move(ptr)) { }
};
A a{std::make_unique<mutex>()};
Run Code Online (Sandbox Code Playgroud)
请注意,如果要在不同对象之间共享互斥锁,则应改用 shared_ptr 或 weak_ptr。