c++ - 编译器是否应该忽略导致运行构造函数或析构函数的未使用变量?

标签 c++ g++ destructor compiler-warnings unused-variables

我有一些代码放在析构函数中以确保它在正常退出和异常堆栈展开时运行:

struct withProtectedClose {

  ~withProtectedClose() {
    // Do some cleanup here...
  }
};

void test() {
  withProtectedClose close;

  // Do some work before closing
}

然而 g++ 编译器 (g++ (GCC) 3.4.6 20060404 (Red Hat 3.4.6-11)) 正在提示:

test.cpp: In function `void test()':
test.cpp:28: warning: unused variable 'close'

我可以通过以某种方式引用变量来使它静音,但这会使代码变得困惑只是为了让编译器静音,而不是我希望我的代码受到影响的方式。

是否存在析构函数这一事实足以让编译器知道构造后没有使用变量没有区别?

假设编译器在仍然收到合法未使用变量的通知的同时无法关闭,是否有其他方法可以仅通过使用它来使它静音?

最佳答案

我倾向于认为这是编译器中的错误。它仍然存在于 g++ 4.7.1 中。

作为解决方法,您可以尝试定义一个什么都不做的构造函数。它抑制了 g++ 4.7.1 的警告,我不知道 3.4.6。

关于c++ - 编译器是否应该忽略导致运行构造函数或析构函数的未使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12326554/

相关文章:

c++11 - "no viable conversion"带有柠檬用于 clang 但对 g++ 有效

QML 中未调用 C++ 类型的析构函数

c++ - 我如何*不*删除析构函数中的成员?

c++ - ifstream _Read_s 发生了什么?

c++ - 如何用 NULL 初始化成对 vector (c++)

c++ - libcUrl 错误请求。似乎没有发送 POST 正文,只有标题

c++ - std::this_thread::sleep_for() 和 GCC

c++ - 使用 g++ 编译 C++ 文件时出错

C++: STL: vector: remove: 析构函数调用

c++ - 在多线程环境中用原子保护两个变量