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