5.2.4 轻量级的引用计数控制类LightRefBase
最后更新于:2022-04-02 05:49:49
上面介绍的RefBase,是一个重量级的引用计数控制类。那么,究竟有没有一个简单些的引用计数控制类呢?Android为我们提供了一个轻量级的LightRefBase。这个类非常简单,我们不妨一起来看看。
**RefBase.h**
~~~
template
class LightRefBase
{
public:
inlineLightRefBase() : 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(this);
}
}
inlineint32_t getStrongCount() const {
return mCount;
}
protected:
inline~LightRefBase() { }
private:
mutable volatile int32_t mCount;//引用计数控制变量
};
~~~
LightRefBase类够简单吧?不过它是一个模板类,我们该怎么用它呢?下面给出一个例子,其中类A是从LightRefBase派生的,写法如下:
~~~
class A:public LightRefBase //注意派生的时候要指明是LightRefBase
{
public:
A(){};
~A(){};
};
~~~
另外,我们从LightRefBase的定义中可以知道,它支持sp的控制,因为它只有incStrong和decStrong函数。
';