碰到一段互鎖量的加解鎖代碼,存在困惑。求解答。根據如下代碼,通過建構式對傳入的類物件進行了加解鎖操作,但是直接對那個類PdfMutex物件進行加解鎖操作不是也可以嗎?為什么一定要通過建構式傳入再加解鎖呢?有和區別,謝謝解答!
如下代碼,在建構式PdfMutexWrapper::PdfMutexWrapper中對類PdfMutexWrapper的私有化參考變數PdfMutex& m_rMutex進行了串列式初始化。然后在建構式中呼叫這個參考變數m_rMutex的成員函式Lock, 編譯時報錯,不能使用不完整型別;但是改成完整型別后編譯還通不過,報錯“非靜態成員不能在其類的外部定義”。求解,謝謝各位大神!
class PdfMutexWrapper
{
public:
/** Lock a mutex.
*
* \param rMutex the mutex to be locked.
*/
PODOFO_NOTHROW inline PdfMutexWrapper( PdfMutex & rMutex );
/** Unlocks the mutex on destruction
*/
inline ~PdfMutexWrapper();
private:
PdfMutex& m_rMutex;
};
PdfMutexWrapper::PdfMutexWrapper( PdfMutex & rMutex ): m_rMutex( rMutex )
{
m_rMutex.Lock();
}
uj5u.com熱心網友回復:
第一個問題:“通過建構式對傳入的類物件進行了加解鎖操作,但是直接對那個類PdfMutex物件進行加解鎖操作不是也可以嗎?為什么一定要通過建構式傳入再加解鎖呢?有和區別”,搜一下RAII,就是你想要的答案。對于鎖的話,從c++11起都不用自己寫MutexWrapper了,標準庫提供std::lock_guard,std::unique_lock等模板可以用。第二個問題:錯誤提示“非靜態成員不能在其類的外部定義”已經很明顯的指出錯誤了,代碼里有個非靜態資料成員在類外面定義了,搜一下,很快就能解決。
uj5u.com熱心網友回復:
多謝多謝大佬!轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/207368.html
標籤:C++ 語言
