引用计数+智能指针的自析构类 (一)基本实现

  主要思路,对来值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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值