以下代码片段有一个内存泄漏,我花了太多时间追逐.问题是在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_为成员变量而不是局部变量保留表单的名称.
| 归档时间: |
|
| 查看次数: |
4384 次 |
| 最近记录: |