Android系统轻量级指针、强指针和弱指针

2020-03-17  本文已影响0人  耿渊博

自己学习记录使用

引用计数原则,每当有一个指针指向了一个new出来的对象时,就对这个对象的引用计数增加1,每当有一个指针不再使用这个对象时,就对这个对象的引用计数减少1,每次减1之后,如果发现引用计数值为0时,那么,就要delete这个对象了

对象的引用计数同时存在强引用和弱引用两种计数,

Android系统提供的三种智能指针分别就称为轻量级指针(Light Pointer)、强指针(Strong Pointer)和弱指针(Weak Pointer)

智能指针类

1. 轻量级指针

LightRefBase:位置在frameworks/base/include/utils/RefBase.h

template <class T>
class LightRefBase
{
 public: 
          inline LightRefBase() : mCount(0) {}
          inline void incStrong(const void* id) const {
                    android _atomic_inc(&mCount);
          }
          inline void decStrong(const void* id) const {
                    if (android_atomic_dec(&mCount) == 1){
                        delete static_cast<const T*>(this);
                    }
        }
        //! DEBUGGING ONLY: Get current strong ref count.
    inline int32_t getStrongCount() const {
        return mCount;
       }
protected:
    inline ~LightRefBase() { }
 
private:
    mutable volatile int32_t mCount;  // 引用计数器了
}

成员变量mCount,引用计数器
成员函数incStrong和decStrong来维护引用计数器的值,这两个函数就是提供给智能指针来调用的了,这里要注意的是,在decStrong函数中,如果当前引用计数值为1,那么当减1后就会变成0,于是就会delete这个对象。

原文链接:https://blog.csdn.net/luoshengyang/article/details/6786239

上一篇 下一篇

猜你喜欢

热点阅读