C 記憶體洩露

2021-07-11 13:30:41 字數 510 閱讀 8528

c++記憶體洩露主要發生在淺拷貝階段:

例如

#include#include#include#includeusing namespace std;

class a

~a()

int main()

由於發生了淺拷貝,所以程式退出的時候,就中斷了,因為同一記憶體析夠了2次。至於為什麼同一物件析夠2次就會中斷,是因為已經析夠的物件所佔據的記憶體已經還給作業系統,再次訪問時,就報錯了。

為此,c++創造了智慧型指標,但是智慧型指標都有缺陷。

1.auto_ptr:確定是在copy時候,會釋放所有權,而且不可以用於陣列。

2.scoped_ptr克服了auto_ptr在複製的時候,釋放所有權的缺點。

3.scoped_array 是scoped_ptr的擴充套件形式,可以用於陣列。

4.share_ptr可以拷貝,可複製的智慧型指標,但是不可以迴圈引用。

5,.wear_ptr指標檢測share_ptr是否迴圈引用。

C 記憶體洩露

簡單點說就是只申請不釋放 在c 中我們通過malloc,new來通過系統申請記憶體,但當我們使用完畢之後 裡面可能就沒有執行相應的free和delete的操作,這樣我們申請的這部分記憶體系統就不會再次的 分配,這就造成了記憶體洩露!這篇帖子講的很細大家可以研究研究。我們在delete乙個指標之後要將...

C 記憶體洩露

boost基礎 any int p new int 10 應該用 shared ptrp new int 10 boost any a p 危險,會造成記憶體洩露any 的析構函式會刪除內部的 holder 物件 any 是包裝類 如果型別是指標,any 並不會對指標執行 delete 操作,因此,...

C 記憶體洩露

一,c 記憶體洩露 下面列出的是有可能導致記憶體洩露的幾種情況 1,在類的建構函式與析構函式中沒有匹配呼叫new與delete運算子 這種情況需要注意兩個問題 a,在建構函式中使用new分配記憶體,但是在析構函式中沒有釋放掉記憶體。b,在建構函式中使用new 分配記憶體,但是在析構函式中使用dele...