C 11學習筆記5 智慧型指標

2021-07-06 06:16:34 字數 1046 閱讀 7425

1.為什麼要使用動態記憶體

①程式不知道自己需要使用多少物件(比如容器)

②程式不知道所需物件的準確型別(比如不知道是基類還是其派生類)

③程式需要在多個物件間共享資料(共享資料就是說,不同拷貝之間是引用的是相同的元素。比如c++ primer 5th p404的blob類)

2.為什麼要使用智慧型指標來管理記憶體

老的方式:new+delete會忘記釋放造成洩露,或者過早釋放造成空懸指標。

新的方式:shared_ptr+make_shared會為每個指標進行引用計數,當計數變為0時,自動釋放記憶體。

注:①shared_ptr和make_shared都是模板類

②make_shared對應於老方式的new,為物件分配乙個記憶體,然後返回指向該記憶體的指標。

③通常我們可以auto ptr = make_shared(args),其中args是動態建立物件的初始值。

2015/11/30補充:

3.智慧型指標的初始化

(1)預設初始化為空指標nullptr

shared_ptrp1;

這個時候p1就是預設初始化為nullptr

(2)make_shared<>

make_shared<>在尖括號裡面的型別要與shared_ptr<>中的一致。

指向動態分配的記憶體。

①值初始化

shared_ptrp2 = make_shared();

這是p2指向0

②普通初始化

shared_ptrp3 = make_shared(42);

p3指向42

(3)new

因為接受指標引數的智慧型指標建構函式是explicit的,不接受型別轉換。所以,我們不能將乙個內建指標型別隱式轉換為智慧型指標。

用new是必須使用直接初始化。

shared_ptrp4(new int(1024));    //正確。

shared_ptrp5 = new int(2048);  //發生隱式轉換,錯誤。

C 11智慧型指標

本文介紹c 的四種智慧型指標,其中後三種是c 11新增加的,auto ptr已被棄用。要編譯c 11,需要安裝g 4.8 sudo add apt repository ppa ubuntu toolchain r test sudo apt get update sudo apt get inst...

c 11 智慧型指標

如果在程式中使用new從堆 自由儲存區 分配記憶體,等到不需要時,應使用delete將其釋放。c 引入了智慧型指標auto ptr,以幫助自動完成這個過程。c 11摒棄了auto ptr,並新增了三種智慧型指標 unique ptr,shared ptr,weak ptr。一.auto ptr,un...

c 11 智慧型指標

首先來看shared ptr,先貼一小部分vs2013裡的實現 template class shared ptr template class shared ptr public ptr base ty template explicit shared ptr ux px template cla...