请问个位高手小弟看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的,在退出作用域后会自动析构。其占用的内存也会被自动回收掉。
这种自动变量才是最方便的,也不会造成内存泄露,因此,能用的时候尽量用,不要在自动变量完全可以解决问题的时候却硬是要采用堆上动态申请的对象。