Android中的sp和wp指针

2014-11-24 10:33:49 · 作者: · 浏览: 0

相关的代码:


frameworks/base/include/utils/RefBase.h


frameworks/base/libs/utils/RefBase.cpp


sp和wp都是一个模板类,看一下sp类的定义:



可以看到他确实封转了一个原生指针T* m_ptr. 再看一下其中一个构造函数和析构函数:



咋一看好奇怪,因为在构造函数中调用了incStrong(),在析构函数中调用的decStrong(),显然是管理引用计数的函数,但是sp类的中并没有定义这两个函数,这两个函数是在RefBase类中定义的,由此可以得出结论:


要想使用sp或者wp, T必需要继承RefBase类才行


RefBase的静态关系如下:




其中weakref_type是RefBase的内嵌类,weakref_impl则是weakref_type的子类,RefBase的大部分工作都是交由weakref_impl类来完成,通过RefBase的成员变量weakref_impl* const mRefs。查看其中一个sp的构造函数:



建立sp的动态关系如下:


sp


--> RefBase : incStrong()


-->weakref_impl : addStrongRef()


-->android_atomic_inc(&refs->mStrong)