一、方法构造
- 构造函数
默认构造shared_ptr sp和unique_ptr up
指针构造shared_ptr sp(T *)和unique_ptr up(T *),这里默认为explicit
带删除器的构造shared_ptr p(q,d) q这里可以内置指针和智能指针,同时将用d析构器代替delete。所以定义了这么一个带删除器的构造函数,是因为兼容没有定义析构函数的类。
- 拷贝构造 注意到指针构造函数被声明为
explicit,意味着我们删除了指针形式的任何拷贝构造函数。
shared_ptr sp=new T;//error
unique_ptr up=new T;//error
shared_ptr sp1(sp2);//ok,没有发生隐式转换
unique_ptr 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() 对象是否只有一个引用计数
shared_ptr sp=make_shared(args),make_unique(c++14)make_unique_default_init(c++20)
[1]相对于直接使用指针来进行构造
