当我在一个函数中声明一个变量时,我正在使用一些内存。当这个功能完成后,这个工作就是释放内存吗?当他们走出去的范围函数变量在哪里?
函数变量在哪里?
回答
所有的自动存储变量将被释放,你必须要明确有关动态分配的:
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
动态变量没有这样的东西。只有动态*对象*。所有变量都有作用域;与他们的名字具有相同的范围。 (所以'y'刚刚超出范围,因为它应该和一切都很好。) –
@KerrekSB这是一种笑话吗? –
@ScepticalJule:不,它试图修复一个错误的答案:-) –
也许最重要的是你了解栈和堆的概念和这个职位上的主题很好的解释:
What and where are the stack and heap?
聪明睿智一边(auto_ptr对象等),它的要点是,如果他们在堆栈中分配,然后他们被释放时,他们LEA请确保范围,否则您需要小心以释放他们自己。如果你了解上述内容,你将会更好地理解要寻找的东西。
你应该阅读关于自动和动态存储持续时间,因为你误解了“堆栈和堆”。 –
@Lightness轨道轨迹 - 并不是我误解了栈和堆IMO,但是你用C++术语来说是正确的,我应该用这些术语来描述它。最后,你的变量只能在堆栈或堆中,并且只有当堆栈解除展开或者你称为释放函数时才释放这些变量。不过,我确实记得你的观点! – RMo
你的意思是“对象”而不是“变量”,它们绝对可以是堆栈或堆以外的东西。 _这才是重点! :) –
- 1. 变量在哪里条件
- 2. 变量存储在哪里?
- 3. 匿名函数体变量在哪里保存?
- 4. 把js变量放在wordpress函数里
- 5. 变量不能在函数里
- 6. importHref函数在哪里?
- 7. Magento,getOrderedQty()函数在哪里?
- 8. Tan函数在哪里?
- 9. 函数Empty(){}在哪里?
- 10. 函数glCreateShaderObjectARB()在哪里?
- 11. R - `qr.lm`函数在哪里
- 12. ModX:insert_metka函数在哪里?
- 13. 哪里encodeAsSHA()函数
- 14. “参数”变量来自“this.callParent(arguments)”哪里?
- 15. SQL:哪里有变量?
- 16. C++ 11变量模板函数 - 哪里出错?
- 17. 全局变量析构函数未调用,从哪里开始?
- 18. NSLog里面的变量参数函数
- 19. Rails:在哪里放置配置变量
- 20. 这个“posts_path”变量在哪里定义?
- 21. golang环境变量存储在哪里?
- 22. 再次,变量在哪里条款
- 23. drupal -----这些变量在哪里声明?
- 24. MySQL查询在哪里变量等于
- 25. Laravel Vue env变量在哪里?
- 26. 我在哪里定义我的变量?
- 27. Object中的实例变量在哪里?
- 28. nodejs在哪里存储变量?
- 29. cmake中的变量在哪里设置?
- 30. JSFiddle在哪里存储我的变量?
你有没有听说过“堆栈”? - 我猜你正在谈论基本类型,否则也可能会使用堆,当var超出范围(或类似)时,它会释放内存,如果类提供了正确的析构函数...(不是,如果你创建新的实例,当然:在这种情况下,这是你的职责) – ShinTakezou
请不要只是去做假设。 –