【发布时间】:2022-11-16 12:05:44
【问题描述】:
说我有一个方法,然后在方法中新建一个对象
void MyMethod() {
Obj* p = new Obj();
}
所以当函数结束时,指针将被删除,因为它超出了范围,如果我没有返回 p 指针,那意味着没有这个 Obj 对象的引用,为什么编译器不能为我们删除对象?
因此,如果人们忘记这样做,就不会出现“内存泄漏”。
【问题讨论】:
-
如果你想要这种行为,你可以写
Obj p;,它会在方法结束时处理清理。但有时您需要能够创建一个对象,其生命周期与函数的范围不完全匹配。 -
确定对象何时泄漏是一个难题(“垃圾收集”)。例如,
Obj可能会创建一个线程并将自己传递给线程,然后在完成后删除自己。从 MyMethod 退出时删除Obj会过早释放对象。
标签: c++ pointers compiler-construction