C++智能指针的基本使用

本文详细介绍了C++中智能指针的概念和使用,重点讲解了shared_ptr、unique_ptr和weak_ptr的区别及操作。shared_ptr允许多个指针管理同一块内存,引用计数为0时自动释放;unique_ptr独占所指向的对象,不支持拷贝;weak_ptr作为辅助,用于避免循环引用问题。同时,文章还列举了各种智能指针的操作方法及其在内存管理中的重要性。
摘要由CSDN通过智能技术生成

RALL设计理念

将资源和对象的生命周期绑定,对象初始化时初始化资源,对象释放时释放资源.
将资源托管给一个对象,当对象离开作用域的时候会自动调用析构函数,在析构函数里对资源进行释放.

三种智能指针介绍

C++新的标准库提供了两种智能指针的类型(智能指针本质上是一个类)来管理动态内存,shard_ptr允许多个智能指针管理一块动态内存(通过引用技术进行管理,当引用计数为0的时候,释放动态内存),而unique_ptr则独占所指向的对象.weak_ptr是一种伴随类,指向shard_ptr指向的对象.这三个指针都默认放在memory头文件下.

shard_ptr

shard_ptr是一种模板类,使用时需要传入其能指向的对象类型,
shard_ptr a;表示a能指向的对象类型是int.
shard_ptr默认指向空
在这里插入图片描述
在一个判断语句里使用智能指针,相当于判断该智能指针是否为空,是否指向一个对象.
shard_ptr与unique_ptr都支持的操作:

  • shard_ptr sp; unique_ptrsp; //空智能指针,可以指向类型为T的对象.
  • *p //获得智能指针指向的对象.
  • p->men()//等价于(*p.men())
  • p.get()//返回智能指针中保存的指针.
  • swap(p,q);//交换智能指针p和q里面保存的指针.
  • p.swap(q).

shard_ptr单独支持的操作

  • make_shard(args) //拿args为参数动态分配一个T类型的对象,返回一个shard_ptr指向该对象
  • shard_ptrp(q);//p是q的拷贝,该操作会递增q里面的引用计数.q中的指针类型必须能转换成T
  • shard_ptr p=q;//此操作会递减p中的引用技术,如果引用计数递减为0,会释放p所指向的动态内存空间.会递增q中的引用计数.

shard_ptr的析构函数会递减它所指向对象的引用计数,当引用计数减少到0时,就会销毁对象,释放他所占有的内存.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值