|

楼主 |
发表于 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; // 引用计数器
- };
复制代码
写的不太好,以后用的频繁了,再具体修改。 |
|