Android中智能指针
2018-11-19 本文已影响0人
杨殿生
首先智能指针是应用在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的时候这个对象就可以被释放了。如果要使用弱引用使用对象,那么需要先把弱引用升级为强引用然后才可以去引用对象
