本文共 2691 字,大约阅读时间需要 8 分钟。
在头文件RefBase.h中实现RefBase类。
class RefBase { public: .......... class weakref_type { public: RefBase* refBase() const; void incWeak(const void* id); void decWeak(const void* id); // acquires a strong reference if there is already one. bool attemptIncStrong(const void* id); // acquires a weak reference if there is already one. // This is not always safe. see ProcessState.cpp and BpBinder.cpp // for proper use. bool attemptIncWeak(const void* id); //! DEBUGGING ONLY: Get current weak ref count. int32_t getWeakCount() const; //! DEBUGGING ONLY: Print references held on object. void printRefs() const; }; weakref_type* createWeak(const void* id) const; weakref_type* getWeakRefs() const; protected: RefBase(); virtual ~RefBase(); private: class weakref_impl; private: weakref_impl* const mRefs; }
可以看出在RefBase类中,有两个内部类weakref_type和weakref_impl。
类weakref_type中封装了函数。
类weakref_impl,继承了weakref_type,还增加了mWeak变量。在RefBase.cpp中实现weakref_impl类。
class RefBase::weakref_impl : public RefBase::weakref_type { public: volatile int32_t mStrong; volatile int32_t mWeak; RefBase* const mBase; volatile int32_t mFlags;
转载地址:http://pafab.baihongyu.com/