2013-03-25 57 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);