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

本文介绍了引用计数结合智能指针实现自析构类的基本原理,通过RCObject基类和RCPtr模板类详细阐述了如何管理引用计数。讨论了构造函数、拷贝构造函数、赋值操作符的使用,以及在作为函数参数和返回值时的优化。同时,文章提到了在Symbian C++编译器下,优化程度令人惊讶,只调用了一个拷贝构造函数。总结了使用中应注意的问题和使用原则。
摘要由CSDN通过智能技术生成

  主要思路,对来值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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值