ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
上面介绍的RefBase,是一个重量级的引用计数控制类。那么,究竟有没有一个简单些的引用计数控制类呢?Android为我们提供了一个轻量级的LightRefBase。这个类非常简单,我们不妨一起来看看。 **RefBase.h** ~~~ template <class T> 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<const T*>(this); } } inlineint32_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函数。