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)'
.
- 上面的错误是因为
std::mutex
是不可复制的吗?
- 在这种情况下,公开
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());
有两个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)'
.
- 上面的错误是因为
std::mutex
是不可复制的吗? - 在这种情况下,公开
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());