引用计数封装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lightjia/article/details/84324067

在后端开发中,我们创建的一个内存可能在不同的线程中使用,在使用中进行引用计数便于回收。

如下是引用计数的功能类实现

#ifndef __CRCOBJECT__H_
#define __CRCOBJECT__H_
#include "CLogmanager.h"
class CRcObject
{
public:
	CRcObject();
	virtual ~CRcObject();

public:
	void IncRef();
	long DecRef();

protected:
	long mlReferCount;
	CMutex mcRefMutex;
};

#define REF(X) \
do{\
if(nullptr != (X))	\
{	\
(X)->IncRef();	\
}	\
}while(0)

#define UNREF(X) \
do{\
if (nullptr != (X) && (X)->DecRef() <= 0)	\
{	\
DODELETE(X);	\
X = nullptr;	\
}\
}while(0)
#endif



#include "RcObject.h"

CRcObject::CRcObject()
{
	mlReferCount = 0;
}

CRcObject::~CRcObject()
{
}

void CRcObject::IncRef()
{
	mcRefMutex.Lock();
	//atomic_change(&mlReferCount, (int)1);
	++mlReferCount;
	mcRefMutex.UnLock();
}

long CRcObject::DecRef()
{
	long lRet = 1;
	mcRefMutex.Lock();
	//atomic_change(&mlReferCount, (int)-1);
	--mlReferCount;
	lRet = mlReferCount;
	mcRefMutex.UnLock();

	return lRet;
}

猜你喜欢

转载自blog.csdn.net/lightjia/article/details/84324067
今日推荐