【发布时间】:2016-03-16 07:41:58
【问题描述】:
假设我有一个函数或类维护一些指向其他数据对象的指针,如下所示:
class MyObject {
...
AnotherObject* o1, *o2;
SomeObject* s1, *s2;
...
}
int main() {
...
MyObject mo1 = new MyObject();
... // do stuff with mo1
delete mo1;
}
假设它们在初始化期间/之后从其他地方分配了有效的指针值。
当我在内部分配这些指针后销毁 MyObject 对象时,如果我在销毁期间不将指针设为空,是否会导致内存泄漏?:
MyObject::~MyObject() {
o1 = nullptr;
o2 = nullptr;
...
}
谢谢。
【问题讨论】:
-
只要每个
new都与delete配对,是否清空指针对象并没有什么区别。只要您不尝试使用它们,您就会得到不同类型的错误。 -
你应该发布整个
MyObject类,否则很难说。 -
如果你使用
new(或new[])但没有对应的delete(或delete[])那么你有内存泄漏。仅具有非空指针不会导致泄漏。然而,有一种更简单的方法可以避免内存泄漏:不要自己使用指针或动态分配。尽可能使用standard containers 或std::string和RAII,不会有任何泄漏。 -
当你不执行三规则并且不使用 std::shared_ptr 时,有很多方法可以让你的腿断了。所以不要那样做,伤害会更小。
标签: c++ pointers memory-leaks