Android Framework智能指针

本文详细介绍了Android智能指针的概念、特点及其在引用管理、内存自动释放等方面的强大功能。通过实例展示了如何定义和使用智能指针,包括强指针和弱指针的区别,以及它们在内存管理上的不同应用。强调了智能指针在提高程序稳定性和减少代码复杂性方面的优势,同时提醒开发者注意其运行效率相对普通指针较低的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      Android智能指针包括强指针sp(strong pointer),弱指针wp(weak pointer)。在使用智能指针后,动态申请的内存将会被自动释放(有点类似Java的垃圾回收),不

需要再使用delete来释放对象,也不需要考虑一个对象是否已经在其它地方被释放了,从而使程序编写工作减轻不少,而程序的稳定性大大提高。

   

    Android智能指针相关的源代码在下面两个文件中:

    frameworks\base\include\utils\RefBase.h

    frameworks\base\libs\utils\RefBase.cpp

下面我们看看智能指针具体的怎么使用,假设现在有一个类MyClass,如果要使用智能指针来引用这个类的对象,那么这个类需满足下列两个前提条件:

a、该类是虚基类RefBase的子类或者间接子类;

b、该类必须定义虚构造函数Virtual ~MyClass();

       满足了上述条件的类就可以定义Android智能指针了,定义方法和普通指针类似。比如普通指针是这样定义:

    MyClass* p_obj;

Android智能指针是这样定义:

       sp< MyClass> p_obj;

定义了一个智能指针的变量,就可以象普通指针那样使用它,包括赋值、访问对象成员、作为函数的返回值、作为函数的参数等。比如:

       p_obj = new MyClass();  

 // 注意不要写成 p_obj = new sp< MyClass>

       sp< MyClass> p_objp_obj2 = p_obj; 

       p_obj->func(); 

注意不要试图delete一个Android智能指针,即 delete p_obj。不要担心对象的销毁问题,智能指针的最大作用就是自动销毁不再使用的对象。不需要再使用一个对象后,直接将指针赋值为NULL即可:

       p_obj = NULL;

上面说的都是强指针,弱指针的定义方法和强指针类似,但是不能通过弱指针来访问对象的成员。下面是弱指针的示例:

       wp< MyClass> wp_obj = new MyClass(); 

       p_obj = wp_obj.promote();  

      // 升级为强指针,不过这里要用.

       wp_obj = NULL;

Android智能指针用起来是很方便,在一般情况下最好使用智能指针来代替普通指针。但是需要知道一个智能指针其实是一个对象,而不是一个真正的指针,因此其运行效率是远远比不上普通指针的。所以在对运行效率敏感的地方,最好还是不要使用智能指针为好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值