5.2.4 轻量级的引用计数控制类LightRefBase
上面介绍的RefBase,是一个重量级的引用计数控制类。那么,究竟有没有一个简单些的引用计数控制类呢?Android为我们提供了一个轻量级的LightRefBase。这个类非常简单,我们不妨一起来看看。
[—>RefBase.h]
template<class T>
class LightRefBase
{
public:
inline LightRefBase():mCount(0){}
inline void incStrong(const void*id)const{
//LightRefBase只有一个引用计数控制量mCount。incStrong的时候使它增加1。
android_atomic_inc(&mCount);
}
inline void decStrong(const void*id)const{
//decStrong的时候减1,当引用计数变为零的时候,delete掉自己。
if(android_atomic_dec(&mCount)==1){
delete static_cast<const T*>(this);
}
}
inline int32_t getStrongCount()const{
return mCount;
}
protected:
inline~LightRefBase(){}
private:
mutable volatile int32_t mCount;//引用计数控制变量。
};
LightRefBase类够简单吧?不过它是一个模板类,我们该怎么用它呢?下面给出一个例子,其中类A是从LightRefBase派生的,写法如下:
class A:public LightRefBase<A>//注意派生的时候要指明是LightRefBase<A>。
{
public:
A(){};
~A(){};
};
另外,我们从LightRefBase的定义中可以知道,它支持sp的控制,因为它只有incStrong和decStrong函数。