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

Laj*_*agy 8 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.
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*hen 26

使用-Wshadow.

顺便说一句,-W和-Wall都没有--Wshadow.

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

  • @rmeador.对不起,这是一个非常危险的声明.如果您需要编写要移植到其他平台的代码,您根本不能相信所有编辑都会这样做.编写尽可能健壮的代码总是最好的. (3认同)
  • +1.你*甚至*回答了被问到的实际问题! (2认同)
  • 恕我直言,让你的编辑器以对比方式突出显示本地和成员变量,而不是在名称中添加匈牙利疣,这要好得多. (2认同)

Chr*_*isW 5

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

  • 并且没有人在处理代码时发生了复制和粘贴错误?哇. (2认同)