2015-03-25 86 views
1

我有一個名爲MutexLock類,它不會因爲它的聲音:它鎖定在施工互斥,並且釋放它在破壞:GCC警告有關未使用RAII可變

class OpenEXRMutexLock 
    { 
#ifndef HAVE_PTHREADS 
    public: 
     OpenEXRMutexLock() : lock(openEXRmutex) { } 
    private: 
     std::unique_lock<std::mutex> lock; 
#endif 
    }; 

當HAVE_PTHREADS定義,GCC 4.9。 1只要我這樣抱怨未使用的變量:

OpenEXRMutexLock lock; 

當然,這個類的目的是從來沒有用過建築和自動銷燬。

目前,我做了一件醜:我添加

void OpenEXRMutexLock::dummyFuncAvoidingWarnings() const {} 

而且無處不在調用它:

OpenEXRMutexLock lock; 
lock.dummyFuncAvoidingWarnings(); //Eeerk 

是否有辦法避免這種不會對整個項目禁用未使用的變量警告?

+0

參見[如何禁用未使用的變量警告出來的gcc?](http://stackoverflow.com/q/15053776/1708801)專門[這個答案](HTTP://計算器.com/a/23331548/1708801) – 2015-03-25 09:26:42

+0

您的閱讀速度太快......我不想那麼做,因爲這些警告很有趣 – galinette 2015-03-25 09:37:53

+1

請閱讀我指向的具體答案,告訴您如何禁用一個變量一次。 – 2015-03-25 09:38:40

回答

4

GCC足夠智能,可以檢測變量的定義是否調用構造函數調用。在你的情況下,確保構造函數確實被調用(即使是空的)也會將變量定義標記爲具有副作用,並確保不會再發出警告。

This behavior holds true even for ancient versions of GCC.