最近在寫表達(dá)式樹,涉及到一些內(nèi)存管理的囧事:在構(gòu)造樹的過程中經(jīng)常要申請(qǐng)內(nèi)存,一不小心就會(huì)內(nèi)存泄漏,拿幾個(gè)鏈表把所有申請(qǐng)內(nèi)存的指針都記錄下來,等程序結(jié)束后再一次性釋放掉顯然不可行,經(jīng)過提醒于是考慮到智能指針。
智能指針LytPtr通過引用計(jì)數(shù)來判斷是否釋放內(nèi)存。在寫LytPtr過程中出現(xiàn)以下問題:
1.用int來記錄引用計(jì)數(shù),于是控制同一個(gè)對(duì)象的兩個(gè)智能指針引用計(jì)數(shù)可能不同,這顯然不正確,舉例:
于是只能用指針int*來記錄引用計(jì)數(shù)。
2.沒有意識(shí)到引用計(jì)數(shù)跟控制對(duì)象的指針是綁在一起的,在釋放控制對(duì)象的時(shí)候忘記把引用計(jì)數(shù)也釋放掉。
結(jié)論:有什么東西綁定在一起就要考慮類。
3.引用計(jì)數(shù)自減的時(shí)候忘記判斷引用計(jì)數(shù)(int*)是否為0,這樣在釋放沒有控制任何對(duì)象的智能指針時(shí)會(huì)出錯(cuò),因?yàn)橐糜?jì)數(shù)初始化為0;
結(jié)論:在獲得指針?biāo)笇?duì)象之前,必須首先判斷指針是否為空
LytPtr代碼如下:
最后,要意識(shí)到三個(gè)問題:
1.無論如何代碼給別人看之前要先跑
2.以后是有可能加班加點(diǎn)的,要提高困的時(shí)候的工作效率
3.盡量首先學(xué)會(huì)在理論上去認(rèn)識(shí)事物,不然等代碼寫出來再發(fā)現(xiàn)就晚了
第一次發(fā)貼,歡迎各位來噴~