智能指针(二)智能指针类的成员及外部方法

智能指针是一个类模板

经过实例化后,智能指针就和普通类没有什么区别。

  • 构造函数

默认构造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]相对于直接使用指针来进行构造

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