C++ 将互斥体传递给构造函数中的成员变量

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") 不能被引用——它是一个被删除的函数

为什么我会收到这个错误,我该如何修复它才能传递互斥锁?

Jod*_*cus 6

简而言之:你不能。互斥体既不可复制也不可移动。他们不是有充分的理由。但是,如果您想实现这一点,您可以使用 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。