2013-03-25 74 views
0

我对shared_ptr和mutex这两个概念都不熟悉(boost或not boost)。我想在我的班级使用它:'boost shared_ptr'和'boost lock'together =搞砸了

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

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