引用計數封裝
阿新 • • 發佈:2018-11-24
在後端開發中,我們建立的一個記憶體可能在不同的執行緒中使用,在使用中進行引用計數便於回收。
如下是引用計數的功能類實現
#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; }