射精一区欧美专区|国产精品66xx|亚洲视频一区导航|日韩欧美人妻精品中文|超碰婷婷xxnx|日韩无码综合激情|特级黄片一区二区|四虎日韩成人A√|久久精品内谢片|亚洲成a人无码电影

您現(xiàn)在的位置:首頁 > IT認證 > 軟件水平 >

軟考程序員輔導:C++內存泄漏的解決辦法


發(fā)現(xiàn)大家對寫庫很熱衷。不過,寫一個庫,用C++最麻煩的事情,就是你new完了要記著delete。不過,這么傻瓜化的操作,有沒有辦法讓電腦自動完成呢?當然是可以的。思路有以下三點:

  1、Parent對象。

  每一個對象,都要有唯一的parent,當parent析構時,要帶動他所有的children析構。

  好處:

  實現(xiàn)簡單,且具有邏輯性。

  比如:一個窗口,他的按鍵,就應該是這個窗口的children,當窗口析構的時候,按鍵也必須析構。

  壞處:

  不可以有復制構造函數(shù)……

  這個也很好理解。A-->B-->C中,a是b的parent,b是c的parent,如果允許復制,B復制了個D,那C就有兩個parent,究竟怎么析構呢?

  開源庫的實現(xiàn):

  Qt實現(xiàn)了這種方式的內存管理,尤其是對GUI框架,十分適用。

  2、引用計數(shù)的SharedPtr

  指針,進行復制操作的時候,引用計數(shù)+1,析構的時候引用計數(shù)-1,當引用計數(shù)為0的時候,釋放空間。

  好處:

  實現(xiàn)簡單

  壞處:

  具有循環(huán)引用的情況。要引入WeakPtr

  開源庫的實現(xiàn):

  Qt同時實現(xiàn)了這種技術,Boost也有相關實現(xiàn)。

  我因為最近想自己實現(xiàn)一套Signalandslot庫,也實現(xiàn)了SharedPtr,開源。

  地址:/raylib/raylib/blobs/master/SmartPtr.hpp

  評述:

  這是C++中最通用的實現(xiàn)手段,如果你要做一套類庫,嘗試使用SharedPtr,會讓事情變得更加簡單。

  3、重載new,實現(xiàn)GC

  直接重載C++操作符,實現(xiàn)垃圾回收。初始化一個內存池,當內存池滿的時候,進行垃圾回收操作。

  好處:

  一勞永逸

  壞處:

  實現(xiàn)困難。

  占用內存大。

  對已有的環(huán)境,不一定會有很好的支持。

  開源庫的實現(xiàn):

  python和java都有垃圾回收的實現(xiàn),可以進行參考。

  評述:

  內存池也許不一定要做垃圾回收,如果是靜態(tài)的內存池,可以加速內存分配的過程。

相關文章

無相關信息
更新時間2022-09-16 10:03:35【至頂部↑】
聯(lián)系我們 | 郵件: | 客服熱線電話:4008816886(QQ同號) | 

付款方式留言簿投訴中心網(wǎng)站糾錯二維碼手機版

客服電話:4008816886
付款方式   |   給我留言   |   我要糾錯   |   聯(lián)系我們