shared_ptr

引用对象+1的情况

初始化一个

auto pPlayer = make_shared<Player>();

作为实参传递

auto p1(pPlayer);

作为函数返回值

shared_ptr pFunction(shared_ptr<Player>&)auto p2 = pFunction(p1);

shard_ptr若在pFunction里初始化且没有变量来接它的返回值,则生命周期结束引用计数会-1

p1指向新的对象,pPlayer、p2指向的对象的计数-1,计数为0则shared_ptr的内存释放

在函数里作为形参传递,超出函数的作用域则计数-1

use_count()

返回shared_ptr的引用计数,
unique()返回是否use_count() == 1

reset

reset不带参数
auto pPlayer = make_shared();
若shared_ptr初始化的指针pPlayer是指向该对象的唯一指针,则reset释放所指向的对象,并且把pPlayer指针指向空。
若不是指向该对象的唯一指针,则指向该对象的引用计数-1,并且把指针置为空。

若reset有参数

若pPlayer是 唯一指向该对象的指针,则释放pPlayer指向的对象,让pPlayer指向新对象。
若pPlayer不是唯一指向该对象的指针,则指向该对象的引用计数-1,让pPlayer指向新对象。

可以通过reset来初始化shared_ptr

解引用*pPlayer

获得pPlayer所指向的对象。

get()函数

如pPlayer.get()返回的是内置存储的指针Player的对象

swap();

用pPlayer再实例化一个shared_ptr对象,命名为pPlayer2
可以写swap(pPlayer, pPlayer2)也可以写pPlayer.swap(pPlayer2);
给pPlayer传入一个年龄为2,pPlayer2传入10,通过打印所指向对象的年龄可以看出,调用swap交换了两者所指向的对象。

= nullptr

将所指向的对象的引用计数-1,若引用计数为0,则智能指针释放指针所指向的对象
把智能指针置为空

shared_ptr作为判断条件,如

if(pPlayer) { // TODO  }
自定义删除器
void myDelete(int  *p) { delete p; }
shared_ptr<int> p(new int(12345),  myDelete);

shared_ptr管理动态数组的时候则需要自定义删除器
也可以default_delete,如shared_ptr (new Player[10], std::default_delete<A[]>());
一种不用自定义删除器的写法shared_ptr<Player[]> p(new Player[]);

————————————————————————————————————————

后续待补充。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值