【问题标题】:gcc warns about unused RAII variablegcc 警告未使用的 RAII 变量
【发布时间】:2015-03-25 09:23:46
【问题描述】:

我有一个名为 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

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

【问题讨论】:

  • 你读我的问题太快了……我不想这样,因为这些警告很有趣
  • 请阅读我指出的具体答案,该答案向您展示如何一次为一个变量禁用它。
  • 请发布一些实际代码,因为我的 g++ 4.9.2(诚然不完全是您的编译器,但非常接近)不会在调用构造函数后立即给出未使用的变量警告。即使该构造函数实际上是空的。您可能还希望分享您如何准确调用 g++。
  • @gha.st :你是对的:添加一个空的ctor解决了这个问题。要输入详细答案吗?

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


【解决方案1】:

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

This behavior holds true even for ancient versions of GCC.

【讨论】:

    猜你喜欢
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多