Android中智能指针

原文链接 https://www.jianshu.com/p/e4379961ad74

首先智能指针是应用在C++层面的,java中是把指针这个东西隐藏了的,回收对象使用GC不需要程序员自己去处理

为什么要引入智能指针

C++中使用对象会存在几个问题

1,对象创建后的初始化问题

2,new和delete不成对出现问题

3,野指针问题

什么是野指针,比如ptr指向一个对象,这个对象使用完后也被delete了,但是ptr并没有被设置成null,这样如果有人去引用ptr这个指针就会出现野指针的问题

智能指针的出现就是为了解决上面的三个问题

首先在对象初始化的时候我们叫对象的指针设置成null
解决delete和野指针的问题就需要统计当前对象是否被引用,使用引用计数法,也就是使用count去计数当前对象引用的计数,如果有人引用他了那么+1,释放他那么-1

Android中如果使用智能指针

安卓智能指针分为强指针,和弱指针
强指针好理解,就是指针指向一个引用。那什么是弱指针呢
举例一种情况,假设A对象中有B对象的应用,B对象中有A对象的引用,这个时候A和B对象他们的引用计数都不是0,也就是说他们都不会被释放,这样就会造成类似死锁的情况,而弱指针就是为了处理这种情况
当两个对象互相引用的时候,那么一个引用为强指针,另一个为弱指针,引用计数规则为,如果强引用+1那么弱引用也需要+1,如果弱引用+1强引用可以不+1,当强引用计数为0的时候这个对象就可以被释放了。如果要使用弱引用使用对象,那么需要先把弱引用升级为强引用然后才可以去引用对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值