【发布时间】:2009-05-26 17:05:49
【问题描述】:
下面的代码sn-p有内存泄漏,我花了太多时间追下来。问题是在Foo()内部,局部变量x_隐藏了成员变量x_。这也很烦人,因为编译器可能会警告我。 GCC 中是否有此类警告的标志? (出于好奇:我首先使用局部变量,然后将其更改为成员变量,但忘记删除类型声明。)
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.
}
【问题讨论】:
-
有几个人提到你应该只使用纯字符串对象而不是指针和动态分配——他们是对的。如果(我怀疑)你真的想知道如何让编译器在你声明一个隐藏成员变量的局部变量时警告你,我建议澄清你的问题。
-
因为你有指针作为成员变量,请记住提供复制构造函数和赋值运算符。
-
如果不提供它们,那么至少取消默认值。