請問個位高手小弟看c++教程有一點沒明白
new一個對象必須delete刪除,不是new的對象就不需要刪除了嗎?
代碼:
Person p("john green");
cout < < p.getName(); //string name的屬性值還存在,此時還占著內(nèi)存
delete &p; //只有
cout < < p.getName(); //這樣才提示不存在,如果delete &p注釋掉,p對象的name屬性始終是占著內(nèi)存的
但是我看很多教程上的代碼不是new的對象他們并沒有delete,
難道不是new的對象就不用delete,但是他自己并不回收內(nèi)存阿()????????
解析:
1、p只是一個棧變量,不是堆變量,會自動析構(gòu)的,不能使用delete
2、你這個問題讓我感覺無可奈何。
感覺缺少基本的理解。
生存在棧上的對象和生存在堆上的對象你要搞清楚。
堆需要手動回收。
棧則由系統(tǒng)自動回收!
3、不是new的,在退出作用域后會自動析構(gòu)。其占用的內(nèi)存也會被自動回收掉。
這種自動變量才是最方便的,也不會造成內(nèi)存泄露,因此,能用的時候盡量用,不要在自動變量完全可以解決問題的時候卻硬是要采用堆上動態(tài)申請的對象。