用shared_ptr指向vector,利用智慧型指標管理vector比自己用智慧型指標申請陣列好
#include
#include
#include
#include
using std::cout;
using std::endl;
using std::cin;
using std::shared_ptr;
using std::unique_ptr;
using std::auto_ptr;
using std::vector;
using std::make_shared;
shared_ptrint>>
shared
(int size=0)
shared_ptrint>>
use_shared()
shared_ptrint>> ptr2 = ptr1;
//右指標引用計數++,ptr2也是同型別的智慧型指標,所以又++,
cout <<
"目前有"
<< ptr1.
use_count()
<<
"個智慧型指標指向該動態物件"
<< endl;
return ptr2;
//返回後,ptr2指標先完成返回值的賦值,然後ptr2,ptr1依次析構,引用計數減少2次
}int
main()
}
make_shared(args…)
指定t類的args形參的建構函式,返回物件的指標
shared_ptr(another_shared_ptr)
拷貝乙個shared_ptr,計數++
p=q遞減p計數,遞增q計數,若p計數遞減為0,則自動釋放其管理的物件記憶體
p.unique()
若計數為1,則返回1,否則返回0
p.use_count()
返回p管理物件一共有多少個shared_ptr指向它
p單純乙個shared_ptr可以作為判斷空的條件
*p解引用指標,返回其指向的物件
p->member()
呼叫member函式
p->data
訪問data資料
(*p).somemember
解引用後訪問
p.get()
返回普通指標,慎用!! 千萬不能用get去初始化乙個智慧型指標
p.reset()
釋放p指向的物件
p.reset(q)
讓p指向q,並釋放原來p指向的物件
p.reset(q,d)
讓p指向q,並釋放原來p指向的物件,使用d作為刪除器
void
f(shared_ptr<
int> p)
intmain()
c++primer對智慧型指標的計數描述:給智慧型指標初始化則計數++
賦值shared_ptr會遞增右側而遞減左側指標計數
如果計數為0,則自動銷毀該指標管理的物件
a類中含有智慧型指標,則a類的拷貝,賦值,銷毀也會導致智慧型指標的拷貝,賦值和銷毀shared_ptr不直接支援管理動態陣列,如果要申請,則必須自己定義刪除器
所以shared_ptr不支援指標的運算,和自增,自減運算
shared_ptr遍歷陣列方式:
shared_ptr<
int>sp(
newint[10
],(int
*p)for
(int i=
0;i<
10;i++
) cout <<
*(sp.
get(
)+i)
<<
" ";
如果shared_ptr管理的不是new出來的資源,那麼記得給他傳遞乙個刪除器來管理你的資源 智慧型指標之獨佔指標
2.unique ptr 獨佔指標 獨佔型的指標不允許其它的智慧型指標共享其內部的指標,不允許通過賦值將乙個unique ptr賦值給另外乙個unique ptr unique ptr p1 new int 10 unique ptr p2 p1 錯誤的,不能複製給乙個獨佔的智慧型指標 unique...
智慧型指標之共享指標
智慧型指標是儲存指向動態分配物件指標的類。三種智慧型指標 std shared ptr std unique ptr std weak ptr.使用時需要加上標頭檔案 include 1.共享智慧型指標 shared ptr 初始化 shared ptr初始化可以通過reset方法初始化shared...
C 之智慧型指標
本文發表於1999年10月份的c c users journal,17 10 1.為什麼稱它為 自動 指標?auto ptr只是眾多可能的智慧型指標之一。許多商業庫提供了更複雜的智慧型指標,用途廣泛而令人驚異,從管理引用的數量到提供先進的 服務。可以把標準c auto ptr看作智慧型指標的ford...