1. 程式人生 > >c++避免記憶體洩漏

c++避免記憶體洩漏

在c/c++語言對於程式記憶體的管理不像java語言一樣有自己的垃圾回收機制,而c/c++卻要程式設計師手動的釋放用關鍵字new或者 malloc系統函式申請的記憶體空間,然而由於程式設計師的疏忽可能會忘記去手動釋放記憶體,這樣就導致了程式記憶體的洩漏。

在c/c++的程式記憶體分配中,自頂向下分為程式碼段,資料段,棧區,棧保留區,動態連結庫區,堆保留區,堆區。

程式棧記憶體有系統管理,棧上的資料生命週期結束時系統會自動回收棧上的記憶體,而堆上的記憶體有程式設計師自己分配,堆上資料的生命週期結束時系統不會自動回收它的記憶體,而是需要程式設計師手動釋放,這樣就很容易造成記憶體洩漏。

介於堆與棧的區別,想要避免記憶體洩漏就需要用到它們的特性,當然還有關於c++解構函式的特性,在c++中,當class物件的生命週期結束時,class物件會自動呼叫自己的解構函式來釋放類咱例項化時建構函式所申請的記憶體空間。

因此,如何來避免由於程式設計師的疏忽而導致記憶體洩漏就相對比較明瞭了,那就是將動態記憶體的申請放在類的建構函式中,然後在類的解構函式中手動釋放建構函式申請的記憶體空間,最後將class物件定義在程式棧上。這樣在class物件生命週期結束時,系統會自動回收棧上class物件所佔的記憶體,同時class物件在它的生命週期結束時將會自動呼叫自己的解構函式來釋放建構函式申請的堆記憶體空間,這樣留可以間接地使用程式棧來管理自動分配的記憶體,也就間接地避免了程式執行過程中記憶體的洩漏。

以上只是個人的一點愚見,有什麼不對的地方還請大神幫忙指出。