美文网首页
Android智能指针

Android智能指针

作者: cctrian | 来源:发表于2017-06-05 20:59 被阅读0次

A、在这里说明下,android中sp为强指针(sp==IServiceManager*),wp为弱指针。而在C++中,指针有两个头痛的问题,一是忘记释放动态申请的对象从而造成内存泄露;二是对象在一个地方释放后,又在别的地方被使用,从而引起内存访问错误。而android中有智能指针,可以动态的自动释放内存(类似JAVA的垃圾回收),这样就不需要再调用delete来释放对象了,android智能指针类型就分为强指针与弱指针

B、强指针是通过引用计数来记录有多少使用者在使用一个对象,如果所有使用者都放弃了对该对象的引用,则该对象将被自动销毁;而弱指针也指向一个对象,但是弱指针仅仅记录该对象的地址,不能通过弱指针来访问该对象,要想访问弱指针所指向的对象,需首先将弱指针升级为强指针(通过wp类所提供的promote()方法)。弱指针所指向的对象是有可能在其它地方被销毁的,如果对象已经被销毁,wp的promote()方法将返回空指针,这样就能避免出现地址访问错的情况。也就是说对象本身会增加一个弱引用计数,同时WP还包含m_ref指针,用于wp升级为sp时使用。事实上我们对wp的唯一操作就是将其升级为sp,然后判断升级成不成功,如果成功说明该对象存在,如果不成功说明该对象已经释放掉了

C、关于指针使用

【1】加入有个类MyClass,需要使用智能指针来引用这个类对象,则该类满足两个条件:

                 (1)此类必须是RefBase的子类或间接子类

                   (2)此类必须定义虚拟构造函数,如:virtual ~MyClass();

【2】满足条件后,普通指针定义:MyClass* p_obj;   智能指针定义:spp_obj;(注意不是sp *p_obj,牢记sp就约等同于MyClass*) 。

【3】定义指针变量后,就可以像普通指针一样进行对变量的操作了。如:

             p_obj=newMyClass();// 注意不要写成p_obj=newsp<MyClass>

             p_obj->func();

【4】用完以后不要delete,因为智能指针会自动帮你销毁掉,用完一个对象后,只需要p_obj=NULL; 即可

【5】上面是定义一个sp,而定义一个wp并进行操作呢

wp<MyClass>wp_obj=newMyClass();

p_obj=wp_obj.promote();// 升级为强指针。不过这里要用.而不是->

p_obj->func();

wp_obj=NULL;

【6】说明:如果是第一次引用sp<MyClass>对象,则会调用MyClass的onFirstRef方法。

相关文章

  • Android智能指针分析

    Android智能指针分析总结 什么是智能指针 C++ 指针需要手动释放,否则会造成内存泄露,但是如果项目工程比较...

  • Android智能指针

    网上已经有很多分析智能指针的文章了,讲得不错的是:Android系统的智能指针(轻量级指针、强指针和弱指针)的实现...

  • android智能指针介绍

    本篇介绍 android中有三种智能指针,分别是轻量级指针,强指针,弱指针。轻量级指针实现简洁,效果类似于强指针,...

  • Android智能指针

    前言 Java 和 C/C++ 的一个重大区别,就是它没有"指针"的概念,这并不代表 Java 不需要只用指针,而...

  • android智能指针

    下面是android 7.1.1中的源码先从简单的LightRefBase开始, 它里面只用了简单的mCount来...

  • Android智能指针

    A、在这里说明下,android中sp为强指针(sp==IServiceManager*),wp为弱指针。而在C+...

  • Android之智能指针

    什么是智能指针 智能指针是C++中的一个概念,通过基于引用计数的方法,解决对象的自动释放的问题。 在Android...

  • 目录

    智能指针(1) 智能指针(2) 智能指针(3) 智能指针之使用 容器 - vector(1) 容器 - vecto...

  • 智能指针到Android引用计数

    智能指针 LightRefBase RefBaseStrongPointerWeakPointer 智能指针 这是...

  • C++面试重点再梳理

    智能指针 请讲一下智能指针原理,并实现一个简单的智能指针 智能指针其实不是一个指针。它是一个用来帮助我们管理指针的...

网友评论

      本文标题:Android智能指针

      本文链接:https://www.haomeiwen.com/subject/udswfxtx.html