'boost shared_ptr'和'boost lock'在一起=搞砸了

时间:2013-03-25 10:38:51

标签: boost locking shared-ptr boost-thread

我不熟悉shared_ptr和mutex这两个概念(提升或不提升)。我试图在我的课程中使用它:

typedef boost::shared_mutex Lock;
typedef boost::unique_lock< Lock > WriteLock;
typedef boost::shared_lock< Lock > ReadLock;

class subscriptionInfo 
{
public:
//this is not a copy constructible class. so I have to use shared pointer
boost::shared_ptr<Lock> myLock; 
...
}
...
std::vector<DATA_MSG_PTR>& subscriptionInfo::getIncoming() {
    ReadLock Lock(myLock);
    return incoming;
}

错误说:

error: no matching function for call to ‘boost::shared_lock<boost::shared_mutex>::shared_lock(boost::shared_ptr<boost::shared_mutex>&)’

如果你帮我找出搞砸了什么以及如何解决它,我将不胜感激。 感谢

1 个答案:

答案 0 :(得分:1)

myLock成员是一个指针。一个聪明的但无论如何是一个指针。 shared_lock构造函数接受对互斥对象的引用,而不是指针。这就是错误消息发生的原因。要解决此问题,您必须将指针取消引用为ReadLock Lock(*myLock);