動態記憶體的學習

2021-07-11 17:11:07 字數 684 閱讀 1072

1、物件有可能會被分配到三類空間中:

(1)靜態記憶體;(2)棧記憶體;(3)記憶體池(堆)。

2、物件根據所在不同的空間有兩種不同的建立和銷毀方法:

(1)前兩種是由編譯器自動建立和銷毀的;

(2)最後一種的生存期是由程式設計師編寫程式顯式控制的。

3、動態記憶體的直接管理由new/delete來管理的(容易出問題)。

4、(1)忘記釋放記憶體會帶來記憶體洩露;(2)釋放正在被使用的記憶體會產生非法記憶體的引用。

5、標準庫提供兩種智慧型指標:shared_ ptr和unique_ptr,區別在於前者允許多個指標指向同乙個物件,後者則獨佔所指向的物件。此外還有一種弱引用weak _ptr,指向shared _ptr所管理的物件。

6、智慧型指標能夠記錄有多少個shared _ptr指向相同物件,並能在恰當的時候(計數器為0時)自動釋放物件。

7、智慧型指標計數的增加以及遞減:

(1)拷貝shared _ptr時會遞增,如初始化、作為函式返回值以及作為乙個引數傳遞給函式等情況會進行加1操作;

(2)shared _ptr被賦予新值或者shared _ptr被銷毀時,計數器會遞減。

8、使用動態記憶體的三個原因:

(1)程式不知道自己需要使用多少個物件;

(2)程式不知道所需物件的準確型別;

(3)程式需要多個物件間共享資料。

c primer 動態記憶體學習小記

在做練習題12.7時,遇到乙個問題,如果這麼定義乙個shared ptr是有問題得,不能往裡面push back元素,如下 所示 auto create auto input shared ptr d return d 如果這樣建立了p之後 傳入到input函式中使用push back 就會出錯。正...

C 動態記憶體 學習筆記

string ps new string ps指向乙個動態分配的,初始化為空string的物件 int pi newint pi指向乙個動態分配,未初始化的int物件int pi newint 1024 string ps newstring 10 9 vector int pv new vecto...

動態記憶體的問題

函式體內的區域性變數在函式結束的時候不會自動消亡 1 指標消亡了,並不代表它所指的記憶體會自動釋放。2 記憶體被釋放了,並不代表指標會消亡或者成為null。野指標 不是null指標,而是指向 非法 記憶體的指標,人們一般不會錯用null指標,因為if語句很容易判斷,但是 野指標 很危險,if語句對它...