智能指針(二)智能指針類的成員及外部方法

智能指針是一個類模板

經過實例化後,智能指針就和普通類沒有什麼區別。

  • 構造函數

默認構造shared_ptr<T> spunique_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的隱式轉換

spup在作爲條件時都會被隱式轉換爲bool

作爲共享指針的一些特殊成員

  • p.use_count() p指向對象對應的引用計數
  • p.unique() 對象是否只有一個引用計數

make_shared最安全的分配方法[1]

shared_ptr<T> sp=make_shared<T>(args)

[1]相對於直接使用指針來進行構造

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章