1. 程式人生 > >引用計數封裝

引用計數封裝

在後端開發中,我們建立的一個記憶體可能在不同的執行緒中使用,在使用中進行引用計數便於回收。

如下是引用計數的功能類實現

#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;
}