2014-01-08 29 views
1

当我在一个函数中声明一个变量时,我正在使用一些内存。当这个功能完成后,这个工作就是释放内存吗?当他们走出去的范围函数变量在哪里?

+1

你有没有听说过“堆栈”? - 我猜你正在谈论基本类型,否则也可能会使用堆,当var超出范围(或类似)时,它会释放内存,如果类提供了正确的析构函数...(不是,如果你创建新的实例,当然:在这种情况下,这是你的职责) – ShinTakezou

+0

请不要只是去做假设。 –

回答

6

所有的自动存储变量将被释放,你必须要明确有关动态分配的:

void foo() 
{ 
    int x; 
    int* y = new int; 
    //You get a memory leak with each call to foo without the following line 
    delete y; 
} //x is freed here 
+1

动态变量没有这样的东西。只有动态*对象*。所有变量都有作用域;与他们的名字具有相同的范围。 (所以'y'刚刚超出范围,因为它应该和一切都很好。) –

+1

@KerrekSB这是一种笑话吗? –

+0

@ScepticalJule:不,它试图修复一个错误的答案:-) –

1

也许最重要的是你了解栈和堆的概念和这个职位上的主题很好的解释:

What and where are the stack and heap?

聪明睿智一边(auto_ptr对象等),它的要点是,如果他们在堆栈中分配,然后他们被释放时,他们LEA请确保范围,否则您需要小心以释放他们自己。如果你了解上述内容,你将会更好地理解要寻找的东西。

+0

你应该阅读关于自动和动态存储持续时间,因为你误解了“堆栈和堆”。 –

+0

@Lightness轨道轨迹 - 并不是我误解了栈和堆IMO,但是你用C++术语来说是正确的,我应该用这些术语来描述它。最后,你的变量只能在堆栈或堆中,并且只有当堆栈解除展开或者你称为释放函数时才释放这些变量。不过,我确实记得你的观点! – RMo

+0

你的意思是“对象”而不是“变量”,它们绝对可以是堆栈或堆以外的东西。 _这才是重点! :) –