C++11 智能指针基本思路(非操作型博文)

智能指针

基本原理

以栈内存的特性,退出变量生命空间时,栈内存会自动释放,用栈内存来管理堆内存。细节:以一个类的形式管理创建指针,在析构函数delete指针。
还需要重载*和->可以参考另一篇文章深入重载实践中的重载 * 和 -> 部分

智能指针的作用

C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。

1、从较浅的层面看,智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针。
2、智能指针的作用是防止忘记调用delete释放内存和程序异常的进入catch块忘记释放内存。另外指针的释放时机也是非常有考究的,多次释放同一个指针会造成程序崩溃,这些都可以通过智能指针来解决。

share_ptr

共享型指针,通过引用计数,如果赋值或拷贝给其他智能指针,则use_count+1;若赋为其他值则use_count-1

unique_ptr

唯一型指针,禁用赋值运算符拷贝构造,唯一拥有其所指对象,任一时刻都只有一个unique_ptr指向其对象。通过move转移所有权和release释放所有权。

weak_ptr

weak_ptr是一种智能指针,它对被 shared_ptr 管理的对象存在非拥有性(“弱”)引用。在访问所引用的对象前必须先转换为 shared_ptr
weak_ptr 用来表达临时所有权的概念:当某个对象只有存在时才需要被访问,而且随时可能被他人删除时,可以使用 weak_ptr 来跟踪该对象。需要获得临时所有权时,则将其转换为 shared_ptr,此时如果原来的 shared_ptr 被销毁,则该对象的生命期将被延长至这个临时的 shared_ptr 同样被销毁为止。
weak_ptr 的另一用法是打断 shared_ptr 所管理的对象组成的环状引用。若这种环被孤立(例如无指向环中的外部共享指针),则 shared_ptr 引用计数无法抵达零,而内存被泄露。能令环中的指针之一为弱指针以避免此情况。

参考博客:

写的巨好的博文:
C++11智能指针的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值