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...