关于隐藏成员变量的警告?

时间:2009-05-26 17:05:50

标签: c++ gcc

以下代码段有内存泄漏,我花了太多时间追逐。问题是在Foo()内部,局部变量x_隐藏了成员变量x_。它也很烦人,因为编译器可能已经警告过我。海湾合作委员会是否有这样的警告标志? (对于好奇:我已经通过首先使用局部变量,然后将其更改为成员变量,但忘记删除类型声明来到达错误代码。)

struct A {
  A() x_(NULL) {}

  ~A() {
    delete x_;
  }

  void Foo() {
    HugeThingy* x_ = new HugeThingy();
    x_->Bar("I. Need. Garbage. Collection. Now.");
  }

  HugeThingy* x_;

  DISALLOW_COPY_AND_ASSIGN(A);  // Macro to prevent copy/assign.
}

3 个答案:

答案 0 :(得分:26)

使用-Wshadow。

顺便说一句,-W和-Wall都没有启用-Wshadow。

让编译器帮助避免这种问题是很好的,但如果您使用有助于避免首先创建它的约定,甚至不需要这样做,例如保留x_形式的名称成员变量,而不是局部变量。

答案 1 :(得分:5)

FWIW我不会遇到这个问题,因为我使用命名约定来区分成员数据和局部变量:我的成员数据标识符总是以m_为前缀。

答案 2 :(得分:0)

我们在名字的开头使用这些疣 - a_参数 d_数据成员 s_类中的静态数据 f_文件中的静态数据

......并且没有局部变量的瑕疵。

真的,Lakos的书是你的朋友。