C++有沒有什麼辦法可以統計代碼裡所有類的分配和釋放次數,以方便定位內存瀉漏問題?

黎小魚


C++動態分配的內存都需要釋放,否則就會出現內存洩漏。過去都是new/delete成對使用,一不小心就可能漏掉幾個,然後查代碼很久才能發現,有的甚至一直被隱藏。

C++11標準有幾類智能指針可以使用,不用主動delete釋放,它在其生命週期完結時自動幫你釋放。

C++裡面的四個智能指針: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中後三個是C++11支持,並且第一個已經被C++11棄用。

unique_ptr<string> p(new string ("auto"));/<string>

指針p在其有效範圍外就自動釋放了,如果想要觀察釋放效果,可以將上面的string類改為你的自定義類,並將在其析構函數內打印一條消息顯示調用了析構函數, 你就可以確定它在什麼時候釋放的了。

其它幾類智能指針類似。


碼中尋樂


其實從VS2017以來,調試程序退出時,都會直接打印出內存洩露信息。

其中有分配序號,和分配大小等信息,通過分配序號,可以在下次運行時設置斷點。

這個信息已經足夠中小項目調試了。如果是像chrome那種項目,那就確保每個小模塊沒有內存洩露,然後再確保合成項目。


三袋大菠蘿


重載new/delete。


皮拉夫大王編程


繼承一個公共基類計數


whq7992


可以的,重載new,每次調用的時候進行日誌記錄就可以了。這是很常見的解決方案


分享到:


相關文章: