版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}