std::mutex 的访问函数

Accessor function for std::mutex

有两个class。 Class A 有一个私有成员 std::mutex m_。 Class B 有一个 class A 的实例作为它的成员。

目标是让class B能够使用m_(在class A中)。

我尝试在 class A 中添加访问器方法,如下所示,但出现错误 no matching function for call to 'std::unique_lock<std::mutex>::unique_lock(std::mutex)'.

  1. 上面的错误是因为 std::mutex 是不可复制的吗?
  2. 在这种情况下,公开 std::mutex 的建议方法是什么?
class A {
public:
    // does not work
    std::mutex getMutex() {
        return m_;
    }

private:
    std::mutex m_;
}

class B {
    A a;
    void someMethod() {
        ...
        std::unique_lock<std::mutex> lock(a.m_);
        ...
    }
}

Is above error because std::mutex is non-copyable?

没错。 A std::mutex 无法复制或移动。

What is the suggested way to expose the std::mutex in this case?

在这种情况下,您可以 return 参考

std::mutex& getMutex() {
    return m_;
}

并像

一样使用它
std::unique_lock<std::mutex> lock(a.getMutex());