1. 程式人生 > >Chapter12(動態內存)--C++Prime筆記

Chapter12(動態內存)--C++Prime筆記

.get tor 空指針 未定義 行為 let str span r12

1.分配再靜態或棧內存中的對象由編譯器自動創建銷毀。

2.C++中動態內存的管理是通過new:前者為對象非配空間並返回一個指向該對象的指針。delete:接受一個動態對象的指針,摧毀該對象,並釋放與之關聯的內存。智能指針:負責自動釋放所指對象,都定義在memory頭文件中shared_ptr:允許多個指針指向同一個對象unique_ptr:獨占所指對象。weak_ptr:弱引用,指向shared_ptr所指的對象。
3.make_shared函數是最安全的分配和使用動態內存的方法。使用例子:auto p = make_shared<vector<string>>();
4.每個shared_ptr都有一個關聯的計數器,稱為引用計數。拷貝,函數傳參,函數值返回,關聯計數器都會遞增。當我們給這個shared_ptr賦予新值或是shared_ptr被銷毀時,計數器遞減。

5.構造函數控制初始化,析構函數負責銷毀該對象是進行什麽操作。
6.釋放一塊並非new分配的內存或者將相同的指針值釋放多次,行為未定義。釋放一個空指針是沒有錯誤的。
7.使用動態內存管理三個常見的問題:①.忘記delete內存。②使用已經釋放掉的對象。通過在釋放內存後將指針置為空,有時可以檢測褚這個問題。③同一塊內存釋放兩次。兩個指針指向相同的動態內存空間。對其中一個指針進行了delete後又對另一個進行delete。
8.我們不能將一個內置指針隱式的轉換為一個智能指針,一個返回shared_ptr的函數不能再其返回語句中隱式轉換一個普通指針
9.當將一個shared_ptr綁定到一個普通指針時,我們將內存的管理交給了這個shared_ptr。一旦這樣做了,我們就不應該再使用內置指針來訪問shared_ptr所指的內存了。

10.get用來將指針的訪問權限傳遞給代碼,你只有再確定代碼不會delete指針的情況下,才能使用get。特別的是,永遠不要用get初始化另一個智能指針或者為另一個智能指針賦值
11.release:調用release會切斷unique_ptr和它原來管理的對象間的聯系。release返回的指針通常被用來初始化另一個智能指針或給另一個智能指針賦值。
12.一般來說unique_ptr不能拷貝,但是有一個例外:我們可以拷貝或者賦值一個將要被銷毀的unique_ptr。最常見的就是從函數返回一個unique_ptr。

Chapter12(動態內存)--C++Prime筆記