智能指针

一:智能指针的发展历史

首先为什么要引入智能指针

new 与 delete 配对使用时,在delete的中间有一些譬如break,return之类的语句,程序直接跳出了,那new出来的空间就没有释放,那样就会造成内存泄漏的危害

那么这种问题如何解决呢?

有这样一种思想,RAII(Resource Acquisition Is Initialization)资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源
的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。

那么程序也可以利用这种思想来解决问题:这样的话,当你就算使用return 跳出的时候,你程序结束便会调用析构函数,自动的完成清理工作,而减少因未释放内存



二·:auto_ptr/scoped_ptr/shared_pr/weak_ptr的设计思想、缺陷?及模拟实现



auto_ptr    是比较早期提出来的设计思想  他是这样实现的,看他的构造函数是直接把指针交给下一个 具有管理权的人,在把自身至为NULL

缺陷:  不符合指针的使用,不能说拷贝构造一个指针就把原指针至NULL了,同时当时用*  或者->运算符时,可能也会造成程序的崩溃等一系列问题。


scoped_ptr  守卫指针(防拷贝),设计思想:当你想使用时,不让你用有两种方法限制::1如上图把成员变量设置为私有的,让不让外部的访问2:只声明,不定义变量(不实现)这样别人再用时就call不上了。

缺陷:简单粗暴,直接不让人使用了。一点都不给用还是没从根本上解决问题。

shared_pr:共享指针,引用计数。比起上个scoped_ptr指针来说,并没有那么粗暴,让别人使用了同时也解决了大多数问题(再开辟一个空间,专门记录指向原空间指针的个数,只有当_refcount == 0 的时候才释放空间,反之不释放)


三:分析循环引用及解决方案.


虽然shared_ptr能够解决大多数问题,但是shared_ptr有一个缺陷,就是循环使用没办法解决

  引用计数永远减不下来,永远释放不了


解决方法::weak_ptr指针的引用

弱指针,不能单独存在,用于解决shared_ptr循环引用的问题

实现的原理是:当遇到这种原理是把指针给给_ptr, 但是引用计数是不增加的

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值