|

楼主 |
发表于 2011-5-25 18:43:00
|
显示全部楼层
Re: Re:??????????????????,????
????: Re:??????????????????,????????????
???????????????? Boost?? STL?? ??????
???????
- //-------------------------------------------------------------------
- // CZSharePtr ????
- //-------------------------------------------------------------------
- enum EMEMORYTYPE
- {
- MT_NEW = 0,
- MT_MALLOC = 1,
- };
- template <typename T, EMEMORYTYPE type>
- class CZSharePtr
- {
- public:
- CZSharePtr(int null=0) : m_pPoint(NULL), m_pRefCount(NULL) {}
- ~CZSharePtr() { Release(); }
- void Release()
- {
- if (m_pPoint == NULL) return;
- if (--(*m_pRefCount) == 0)
- {
- switch (type)
- {
- case MT_NEW:
- delete m_pPoint, m_pPoint=NULL;
- delete m_pRefCount, m_pRefCount=NULL;
- break;
- case MT_MALLOC:
- free(m_pPoint), m_pPoint=NULL;
- delete m_pRefCount, m_pRefCount=NULL;
- break;
- }
- }
- }
- void operator = (T* ptr)
- {
- if (ptr == NULL) return;
- if (m_pRefCount == NULL) m_pRefCount = new int(1);
- else (*m_pRefCount)++;
- m_pPoint = ptr;
- }
- void operator = (const CZSharePtr& src)
- {
- m_pPoint=src.m_pPoint, m_pRefCount=src.m_pRefCount;
- (*m_pRefCount)++;
- }
- bool operator == (T* src) { return m_pPoint==src; }
- T* GetPoint() { return m_pPoint; }
- template <typename type>
- operator type* () { return (type*)m_pPoint; }
- private:
- T* m_pPoint;
- int* m_pRefCount; // ?????
- };
复制代码
???????????????????? |
|