主要思路,对来值ref(refcount + 1),对去值deref(refcount - 1),这样不需手动做ref、deref操作就能合理的管理引用计数值。
以下是more effective c++中智能指针+引用计数的实现,它的组成为:
1. RCObject,引用计数类的基类,它封装了refcount +、- 操作ref()、deref()。无需其它额外操作。
2. RCPtr<class T>,模板类,它实现引用计数+智能指针的核心操作。持有RCObject指针,调用构造函数后对RCObject的refCount + 1,析构时对其 - 1。注意拷贝构造函数和operator=操作符的实现,来实现来值ref,去值deref操作。
3. 让类继承自RCObject,使用RCPtr<RCNormal>模板类型声明、创建对象。
//引用计数基类
class RCObject : public CBase
{
public:
RCObject() : refCount(0)/*, shareable(true)*/ {}
virtual ~RCObject() {}
/*重点处理拷贝构造和赋值操作
* 注意:两个操作都不要处理refCount值*/
RCObject(const RCObject& aObj) : refCount(0)/*, shareable(true)*/ {}
RCObject& operator=(const RCObject& aObj) { return *this; }
public:
//refcount操作
void ref()
{
++refCount;
#if DEBUG
LOGF8("refCount = [%d]", refCount);
#endif
}
void deref()
{
#if DEBUG
LOGF8("refCount = [%d]", refCount - 1);
#endif
if (--refCount == 0)
delete this;
}
int getRefCount() { return refCount; }
// //share操作,可有可无
// bool isShareable() { return shareable; }
// bool isShared() { return refCount > 1; }
// void markUnshareable() { shareable = false; }
private:
int refCount;
// bo