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