(C++学习记录)智能指针shared_ptr

为什么要有智能指针

全局对象在程序启动时分配,在程序结束时销毁
局部对象在进入其定义所在的程序块时被创建,在离开该程序块时被销毁
局部static对象在第一次使用前分配,在程序结束时销毁
除上述对象外,C++还支持动态分配对象,动态分配的对象的生存期与它们在哪里创建是无关的,只有当显式地被释放时,这些对象才会被销毁。
为了更安全地使用动态对象,C++11提供两种智能指针类型(shared_ptr和unique_ptr,还有一种是weak_ptr,后续再记录)来管理动态对象,其类似常规指针,最大区别是它负责自动释放所指向的对象,其中shared_ptr允许多个指针指向同一个对象,而unique_ptr则独占所指向的对象。

shared_ptr的创建和支持的操作

四种创建方式

//方式1
std::shared_ptr<int> p1(new int(1));
//方式2
std::shared_ptr<int> p2 = p1;
//方式3
std::shared_ptr<int> p3;
p3.reset(new int(1));
//方式4
std::shared_ptr<int> p4 = std::make_shared<int>(2);

shared_ptr和unique_ptr都支持的操作

代码解释
shared_ptr< T> sp空指针,可以指向类型为T的对象(unique_ptr使用格式想相同)
p将p用作一个条件判断,若p指向一个对象,则为true
*p解引用p,获得它指向的对象
p->mem等价于(*p).mem
p.get()返回p中保存的指针,小心使用
swap(p,q) p.swap(q)交换p和q中的指针

shared_ptr独有的操作

代码解释
make_shared< T>(args)返回一个shared_ptr,指向一个动态分配的类型为T的对象,使用args初始化该对象
shared_ptr< T>p (q)p是shared_ptr q的拷贝,此操作会递增q中的计数器,q中的指针必须能转换为T*
p=qp和q都是shared_ptr,所保存的指针必须能相互转化。此操作会递减p的引用计数,递增q的引用计数,若p的引用计数变为0,则将其管理的原内存释放
p.unique()若p.use_count()为1则返回true;否则返回false
p.use_count()返回与p共享对象的智能指针数量;可能很慢,主要用于调试
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值