适配者模式-c++实现

来源:互联网 发布:python特性 编辑:程序博客网 时间:2024/06/07 13:03

用适配者模式实现了个智能指针


// ProxyPattern.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "assert.h"#define DELETE_POINT(p)if(p){delete p; p = NULL;}class KRefCount{private:int m_nCount;public:KRefCount() :m_nCount(0) {}public:void AddRef() { m_nCount++; }void Release() { --m_nCount; }void Reset() { m_nCount = 0; }};template<class T>class KSmartPtr{private:KRefCount* m_pReference;T* m_pData;public:KSmartPtr() :m_pData(0){m_pReference = new KRefCount();m_pReference->AddRef();}KSmartPtr(T* pValue) : m_pData(pValue){m_pReference = new KRefCount();m_pReference->AddRef();}KSmartPtr(const KSmartPtr<T>& sp) :m_pData(sp.m_pData), m_pReference(sp.m_pReference){m_pReference->AddRef();}~KSmartPtr(){if (m_pReference && m_pReference->Release == 0){DELETE_POINT(m_pData);DELETE_POINT(m_pReference);}}inline T& operator *(){return *m_pData;}inline T* operator->(){return m_pData;}KSmartPtr<T>& operator=(T* pValue){if (m_pReference && m_pReference->Release() == 0){DELETE_POINT(m_pData);DELETE_POINT(m_pReference);}m_pData = pValue;m_pReference = new KRefCount;m_pReference->AddRef();return *this;}T* Get(){T* ptr = NULL;ptr = m_pData;return ptr;}void Attach(T* pObject){if (m_pReference->Release() == 0){DELETE_POINT(m_pData);DELETE_POINT(m_pReference);}m_pData = pObject;m_pReference = new KRefCount;m_pReference->AddRef();}T* Detach(){T* ptr = NULL;if (m_pData){ptr = m_pData;m_pData = NULL;m_pReference->Reset();}return ptr;}};int main(){KSmartPtr<KRefCount>* p;    return 0;}


1 0
原创粉丝点击