栈和堆变量的释放

请问个位高手小弟看c++教程有一点没明白
new一个对象必须delete删除,不是new的对象就不需要删除了吗?

代码:
Person p("john green"); 
cout < < p.getName();    //string name的属性值还存在,此时还占着内存

delete &p;        //只有

cout < < p.getName();  //这样才提示不存在,如果delete &p注释掉,p对象的name属性始终是占着内存的


但是我看很多教程上的代码不是new的对象他们并没有delete,
难道不是new的对象就不用delete,但是他自己并不回收内存阿()????????


解析:
1、p只是一个栈变量,不是堆变量,会自动析构的,不能使用delete

2、你这个问题让我感觉无可奈何。

感觉缺少基本的理解。


生存在栈上的对象和生存在堆上的对象你要搞清楚。

堆需要手动回收。

栈则由系统自动回收!
3、不是new的,在退出作用域后会自动析构。其占用的内存也会被自动回收掉。
这种自动变量才是最方便的,也不会造成内存泄露,因此,能用的时候尽量用,不要在自动变量完全可以解决问题的时候却硬是要采用堆上动态申请的对象。

posted on 2010-05-28 11:06 lhking 阅读(821) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜