gcc 警告未使用的 RAII 变量
gcc warns about unused RAII variable
我有一个名为 MutexLock
的 class,它的作用就像它听起来的那样:它在构建时锁定互斥量,并在销毁时释放它:
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;
当然,class 永远不会在构造和自动销毁之外使用。
目前,我做了一些丑陋的事情:我添加了
void OpenEXRMutexLock::dummyFuncAvoidingWarnings() const {}
到处调用它:
OpenEXRMutexLock lock;
lock.dummyFuncAvoidingWarnings(); //Eeerk
有没有办法避免这种情况而不禁用整个项目的未使用变量警告?
GCC 足够智能,可以检测变量的定义是否调用了构造函数调用。在您的情况下,确保确实调用了构造函数(即使是空构造函数)会将变量定义标记为具有副作用,并确保您不会再收到警告。
我有一个名为 MutexLock
的 class,它的作用就像它听起来的那样:它在构建时锁定互斥量,并在销毁时释放它:
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;
当然,class 永远不会在构造和自动销毁之外使用。
目前,我做了一些丑陋的事情:我添加了
void OpenEXRMutexLock::dummyFuncAvoidingWarnings() const {}
到处调用它:
OpenEXRMutexLock lock;
lock.dummyFuncAvoidingWarnings(); //Eeerk
有没有办法避免这种情况而不禁用整个项目的未使用变量警告?
GCC 足够智能,可以检测变量的定义是否调用了构造函数调用。在您的情况下,确保确实调用了构造函数(即使是空构造函数)会将变量定义标记为具有副作用,并确保您不会再收到警告。