c++ 手动引用计数

    xiaoxiao2021-12-10  16

    #include <Windows.h> class CAddef { public: CAddef(void); virtual ~CAddef(void); private: int _index; CRITICAL_SECTION _cs; //临界锁 public: virtual int AddDef();    //每当该对象需要长久保留一份数据时,需要调用该方法 virtual int Release(); //每当不需要再保留该数据时,调用此方法

    };

    #include "CAddef.h" CAddef::CAddef(void) { _index = 0; InitializeCriticalSection(&_cs); } CAddef::~CAddef(void) { DeleteCriticalSection(&_cs); } int CAddef::AddDef() { EnterCriticalSection(&_cs); ++_index; LeaveCriticalSection(&_cs); return _index; } int CAddef::Release() { EnterCriticalSection(&_cs); --_index; if (_index <= 0) { LeaveCriticalSection(&_cs); delete this; return 0; } LeaveCriticalSection(&_cs); return _index; }

    有了上面那个基类,接下来只需要派生出子类,就可以通过adderf和release进行控制 new出来一份内存,可以多线程共享使用了。

    adderf和release必须一对一出现,否则就会出问题。

    转载请注明原文地址: https://ju.6miu.com/read-700012.html

    最新回复(0)