gcc 警告未使用的 RAII 变量

gal*_*tte 4 c++ gcc warnings raii unused-variables

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

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

当定义了 HAVE_PTHREADS 时,gcc 4.9.1 每次我都会抱怨未使用的变量:

OpenEXRMutexLock lock;
Run Code Online (Sandbox Code Playgroud)

当然,这个类永远不会在构造和自动销毁之外使用。

目前,我做了一些丑陋的事情:我补充说

void OpenEXRMutexLock::dummyFuncAvoidingWarnings() const {}
Run Code Online (Sandbox Code Playgroud)

并随处调用它:

OpenEXRMutexLock lock;
lock.dummyFuncAvoidingWarnings(); //Eeerk
Run Code Online (Sandbox Code Playgroud)

有没有办法在不禁用整个项目中未使用的变量警告的情况下避免这种情况

gha*_*.st 5

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

即使对于 GCC 的古代版本,这种行为也适用。