Gac代码库分析(3)智能指针
2012-12-09 22:01
155 查看
主要在于引用计数的使用
代码示例:
template<typename T> class Ptr { template<typename X> friend class Ptr; protected: vint* counter; T* reference; void Inc() { if(counter) { (*counter)++; } } void Dec() { if(counter) { if(--(*counter)==0) { delete counter; delete reference; counter=0; reference=0; } } } vint* Counter()const { return counter; } Ptr(vint* _counter, T* _reference) :counter(_counter) ,reference(_reference) { Inc(); } public: Ptr() { counter=0; reference=0; } Ptr(T* pointer) { if(pointer) { counter=new vint(1); reference=pointer; } else { counter=0; reference=0; } } Ptr(const Ptr<T>& pointer) { counter=pointer.counter; reference=pointer.reference; Inc(); } template<typename C> Ptr(const Ptr<C>& pointer) { T* converted=pointer.Obj(); if(converted) { counter=pointer.Counter(); reference=converted; Inc(); } else { counter=0; reference=0; } } ~Ptr() { Dec(); } template<typename C> Ptr<C> Cast()const { C* converted=dynamic_cast<C*>(reference); return Ptr<C>((converted?counter:0), converted); } Ptr<T>& operator=(T* pointer) { Dec(); if(pointer) { counter=new vint(1); reference=pointer; } else { counter=0; reference=0; } return *this; } Ptr<T>& operator=(const Ptr<T>& pointer) { if(this!=&pointer) { Dec(); counter=pointer.counter; reference=pointer.reference; Inc(); } return *this; } template<typename C> Ptr<T>& operator=(const Ptr<C>& pointer) { T* converted=pointer.Obj(); Dec(); if(converted) { counter=pointer.Counter(); reference=converted; Inc(); } else { counter=0; reference=0; } return *this; } bool operator==(const T* pointer)const { return reference==pointer; } bool operator!=(const T* pointer)const { return reference!=pointer; } bool operator>(const T* pointer)const { return reference>pointer; } bool operator>=(const T* pointer)const { return reference>=pointer; } bool operator<(const T* pointer)const { return reference<pointer; } bool operator<=(const T* pointer)const { return reference<=pointer; } bool operator==(const Ptr<T>& pointer)const { return reference==pointer.reference; } bool operator!=(const Ptr<T>& pointer)const { return reference!=pointer.reference; } bool operator>(const Ptr<T>& pointer)const { return reference>pointer.reference; } bool operator>=(const Ptr<T>& pointer)const { return reference>=pointer.reference; } bool operator<(const Ptr<T>& pointer)const { return reference<pointer.reference; } bool operator<=(const Ptr<T>& pointer)const { return reference<=pointer.reference; } operator bool()const { return reference!=0; } T* Obj()const { return reference; } T* operator->()const { return reference; } };
1
相关文章推荐
- C++智能指针原理分析与简单实现
- boost 智能指针 shared_ptr 原理分析
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析(3)
- Visual C++及C++中的智能指针应用分析
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
- boost::shared_ptr智能指针分析
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析(4)
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
- Android6.0 智能指针分析
- 智能指针的分析与实现
- WebKit的智能指针分析 - Part 1:RefCounted
- 基础备忘:智能指针小分析
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
- WebKit的智能指针分析 - Part 1:RefCounted
- Android系统的智能指针实现原理分析
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
- C++ 智能指针Auto_PTR 分析
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析(5)
- 【C++深度剖析教程16】智能指针的分析