gcc警告未使用的RAII变量

6

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

有没有一种方法可以避免这个问题,而不需要在整个项目中禁用未使用变量的警告?


请参考如何禁用gcc中未使用变量的警告?,特别是这个答案 - Shafik Yaghmour
你读我问题太快了... 我不想要那个,因为这些警告很有趣。 - galinette
1
请阅读我指向的特定答案,该答案向您展示如何逐个禁用变量。 - Shafik Yaghmour
2
请发布一些实际的代码,因为我的g++ 4.9.2(诚然不是您的编译器,但非常接近)不会在构造函数被调用时立即发出未使用变量警告,即使该构造函数实际上为空。您可能还希望分享如何准确地调用g++。 - danielschemmel
@gha.st:你是对的:添加一个空构造函数解决了这个问题。你想输入详细的答案吗? - galinette
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - galinette
2个回答

7

1

对于 C++17 及以上版本,您可以使用 [[maybe_unused]]

[[maybe_unused]] OpenEXRMutexLock lock;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接