【发布时间】:2011-12-16 17:55:09
【问题描述】:
考虑以下程序:
int main() {
while(...) {
int* foobar = new int;
}
return 0;
}
foobar 何时超出范围?
我知道在使用new时,属性是在堆上分配的,需要用delete手动删除,在上面的代码中,它导致了内存泄漏。但是,范围呢?
我认为一旦 while 循环终止它就会超出范围,因为您不再可以直接访问它。例如,您不能在循环终止后delete 它。
【问题讨论】:
-
这很棘手,因为
foobar是一个指针,它正确地超出范围并被销毁(但它指向的对象没有被释放)。int是堆上的一个对象,没有作用域,并且由于您没有delete调用,所以它被泄露了。