适配者模式-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
- 【C++】实现Singleton模式
- 适配器模式C语言实现
- 策略模式C语言实现
- 建造模式C语言实现
- command模式(c 语言实现)
- C语言实现工厂模式
- C语言分层模式实现
- C语言分层模式实现
- <c++>c++三种单例模式实现
- 设计模式--单例模式 C++实现
- 设计模式 行为模式 命令模式 c语言 版本实现
- KMP字符串模式匹配的C实现
- Objective-C中的Observer模式实现
- Objective C 中实现单例模式
- Objective C 实现Singleton(单例)模式.
- Objective-C实现单例模式
- Objective-C中单例模式的实现
- 【Objective-C】单例模式的实现
- Javascript函数4种调用模式
- Eclipse使用快捷键
- Unity_UGUI知识点思维导图1.0
- iOS开发技巧--利用Xcode提供的模板创建项目
- 暑假书单出炉
- 适配者模式-c++实现
- 扑克牌顺子
- 程序员==学习笔记==java基础==day06==面向对象
- spring和mybatis整合
- 有关Android Studio的问题Error:Failed to find: com.google.android.gms:play-services:6.1.71
- LinkedList源码浅析
- Mac下Intellij idea的SVN无法连接https地址,报错:Server ssl certificate rejected
- python setup
- 关于Java中try-catch-finally-return的执行顺序