關於vp中的內存自動回收機制的看法

    在vp中,採用了對指針指向內存的自動回收機制。在vp中,所有的vp的類實例都有一個計數器,用來存放實例當前被引用的次數。當創建一個實例之後,這個實例的引用數被自動設置成0,如果這個實例被別的實例所引用,則計數器自動加1。反之,計數器減1。當計數器的值爲0時,則實例的內存被自動刪除。vp會對實例計數器的增加分爲顯世和隱式,顯示通常是用戶在代碼中調用ref()函數實現。當使用完畢時,調用unref()函數使計數器減1。隱式一般是在這個實例被加載到了別的父節點上時,計數器會自動加1。當從父節點刪除時,會自動減1。例如,你動態創建了一個channel,這時計數器的值爲0,然後把它加入到某個windows的下面,則計數器加1;反之,當你把它從windows下面刪除的時候,則計數器自動減1,當計數器的值爲0,則自動回收。

  看起來,好像有這麼個機制似乎很好。如,你在你的構造函數中把vp的類實例初始化,並且手動計數器加1。在類的析構函數中,使計數器減1。這樣,當你的主線程推出之前,vp便會把計數器爲0的實例的內存自動回收。並且,由於最後在析構函數中才手動減掉了構造函數中加的1,這樣也可以保證類實例有着健全的生命週期。但,如果vp的類實例只是被引用一次的話,我想這個機制也就沒什麼意義了,但在多次引用中,每次都讓用戶手工加加減減,難免寫錯造成內存泄露,還不如直接讓用戶new和delete來的便捷。當然,加加減減後還有個vuAllocTracer類實例幫你檢查是否泄露,這還是不錯的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章