智能指針是一個類模板
經過實例化後,智能指針就和普通類沒有什麼區別。
- 構造函數
默認構造shared_ptr<T> sp
和unique_ptr<T> up
指針構造shared_ptr<T> sp(T *)
和unique_ptr<T> up(T *)
,這裏默認爲explicit
帶刪除器的構造shared_ptr<T> p(q,d)
q
這裏可以內置指針和智能指針,同時將用d
析構器代替delete
- 拷貝構造
注意到指針構造函數被聲明爲explicit
,意味着我們刪除了指針形式的任何拷貝構造函數。
shared_ptr<T> sp=new T;
unique_ptr<T> up=new T;//不允許,指針形式的隱式構造被禁止
shared_ptr<T> sp1(sp2);//ok,沒有發生隱式轉換
unique_ptr<T> up1(up2);//not ok,沒有拷貝構造
- 賦值操作
sp1=sp2;
up1=up2;//deleted funciton,not ok
-
解引用操作
*sp
*up
-
get()方法
p.get()
返回一個與智能指針指向相同的內置指針
reset()
方法
reset有多個重載形式,分別是p.reset()
p.reset(q)
p.reset(q,d)
,作用是將一個智能指針重置爲內置空指針(或q
指針)
-
->mem
操作
指針指針指向對象中的成員 -
指針交換操作
swap(p,q) p.swap(q)
完成指針指向對象的交換
定義了智能指針到bool
的隱式轉換
sp
和up
在作爲條件時都會被隱式轉換爲bool
型
作爲共享指針的一些特殊成員
- p.use_count() p指向對象對應的引用計數
- p.unique() 對象是否只有一個引用計數
make_shared最安全的分配方法[1]
shared_ptr<T> sp=make_shared<T>(args)
[1]相對於直接使用指針來進行構造