C++智能指針的幾種用法

 auto在c++11中已經棄用。html

1、auto_ptr模板c++

  auto_ptr與shared_ptr、unique_ptr都定義了相似指針的對象,能夠將new到的地址賦給這一對象,當智能指針過時時,析構函數會調用delete函數,對象將被銷燬,由此內存能夠自動被釋放。數組

2、shared_ptr模板安全

  先看代碼:函數

auto_ptr p1 (new string("hello world!");
auto_ptr p2;
p2 = p1;

 

  在以上代碼中,p1與p2指向同一對象,常規指針在釋放內存時,系統會嘗試刪除同一對象兩次。在auto_ptr中,對象的全部權會歸於p2,p1將會變爲野指針。shared_ptr則容許多個指針指向同一個對象,每多一個指針指向,計數器就會+1,一樣在釋放的時候,當數值減爲0的時候即最後一個指針過時的時候纔會調用delete函數。url

3、unique_ptr模板.net

  一樣爲了不多個指針指向,unique_ptr嚴格了全部權的概念,即個人就個人,不容許他人指向(如代碼段二中,採用unique_ptr編輯將會報錯,而原代碼會編譯經過但可能形成崩潰)。指針

4、總結c++11

  須要多個指針指向一個對象時可以使用shared_ptr,如指針數組。不須要多個指針指向一個對象可以使用uniq_ptr,uniqu_ptr比auto_ptr更加安全(編譯報錯遠比程序崩潰好得多)。這裏作了一個表格總結。code

                      

 

 

參考連接:

智能指針用法詳解

三種智能指針使用與區別

四種智能指針的用法和原理

C++智能指針及其簡單實現

相關文章
相關標籤/搜索