gcc警告未使用的RAII变量

时间:2015-03-25 09:23:46

标签: c++ gcc warnings raii unused-variables

我有一个名为MutexLock的类,它听起来像:它在构造上锁定互斥锁,并在销毁时释放它:

    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

有没有办法避免这个而不在整个项目上禁用未使用的变量警告

1 个答案:

答案 0 :(得分:4)

GCC足够聪明,可以检测变量的定义是否会调用构造函数调用。在您的情况下,确保构造函数确实被调用(即使是空构造函数)也会将变量定义标记为具有副作用,并确保您不再收到警告。

This behavior holds true even for ancient versions of GCC.