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