RefBase & sp & wp 实现了类似于智能指针的工作,从而实现了垃圾自动回收的机制。代码见
frameworks/base/include/utils/RefBase.h
1.sp并不是所常见的smart pointer,而是strong pointer。
构造函数:
template<typename T>
sp<T>::sp(T* other)
: m_ptr(other)
{
if (other) other->incStrong(this);
}
析构函数:
template<typename T>
sp<T>::~sp()
{
if (m_ptr) m_ptr->decStrong(this);
}
incStrong()会在构造或复制后,增加强引用1次。而每次delete一个sp对象时,sp对象的强引用就会减少1次。
当对象的强引用次数为0的时候这个对象就会被自动释放掉。
2.wp
wp即weak pointer,实现和sp类似,createWeak()及decWeak()类似于incStrong()及decStrong(),进行弱应用的计数。同时,wp和sp都提供了进行双向转换的方法。
http://forest606.blog.163.com/blog/static/134450089201001811187943/
分享到:
相关推荐
在Android应用程序开发中,智能指针是用于管理内存的重要工具,尤其是在C++ Native层的编程中。本系列文章源代码主要探讨了如何在Android环境中利用智能指针来优化内存管理和防止内存泄漏。智能指针是一种自动管理...
第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,同步类,以及Java中的Handler类和Looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以MediaServer为切入点,对Android...
- **sp、wp、RefBase、Thread等类**:第五章介绍了Android系统中常用的类如sp、wp、RefBase、Thread等,以及同步类、Handler和Looper机制,这些都是理解和开发Android应用的基础。 #### 6. Binder机制全面解析 - **...
`RefBase`类是Android智能指针的核心,它维护了一个弱引用和强引用的计数。`RefBase`有两个重要的内部类:`weakref_impl`和`refcounted_object`(在某些版本中是`refcounted_refptr`)。`weakref_impl`管理弱引用,...
第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,同步类,以及Java中的Handler类和Looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以MediaServer为切入点,对Android...
通过理解RefBase的引用计数机制以及sp和wp的用法,开发者可以更安全、高效地编写Android的Native代码。在调试过程中,尤其是Win32环境下,利用debug工具查看引用计数可以帮助定位潜在的内存问题。
第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,同步类,以及Java中的Handler类和Looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以MediaServer为切入点,对Android...
第5章讲解了android系统中常用的类,包括sp、wp、refbase、thread等类,同步类,以及java中的handler类和 looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以mediaserver为切入点,对...
首先,所有Android的类都会隐式地继承自`refbase`类。`refbase`提供了垃圾回收所需的功能,使得每个对象在声明后都有能力自我释放。智能指针(如sp)不仅是一个指向对象的指针,它还维护着对象的强引用和弱引用计数...
5.2 以“三板斧”揭秘RefBase、sp和wp / 96 5.2.1 第一板斧——初识影子对象 / 96 5.2.2 第二板斧——由弱生强 / 103 5.2.3 第三板斧——破解生死魔咒 / 106 5.2.4 轻量级的引用计数控制类LightRefBase / 108 5.2.5 ...
首先,所有在Android中的类都隐式地继承自`refbase`类,因为`refbase`提供了实现垃圾回收所需的功能。`refbase`维护着对象的强引用和弱引用计数,当强引用计数降为0时,对象会被自动释放。这意味着,实际上,对象...
在编译过程中可能会出现一些错误,例如 make: * [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1 等问题,可以通过修改 Android.mk 文件来解决。 在 Ubuntu 10.04 64 位系统...
第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,同步类,以及Java中的Handler类和Looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以MediaServer为切入点,对Android...
首先,Android的对象几乎都会继承`refbase`类,因为`refbase`提供了垃圾回收所需的功能。每个对象都有强引用和弱引用的计数器,当强引用计数为0时,对象会被自动释放。这里的"智能指针"实际上就是对象本身,它们能够...
如果在32位系统中遇到错误,例如`[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1`,可以通过编辑`frameworks/base/libs/utils/Atomic.h`并重新编译来解决。 编译过程可能...
make: * [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] Error 1 解决方法: 1. 打开 terminal,输入以下命令: $ gedit frameworks/base/libs/utils/Android.mk 2. 修改 LOCAL_...