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函数。