一个自己实现的简单的智能指针模板类
来源:互联网 发布:linux 安装svn客户端 编辑:程序博客网 时间:2024/05/16 02:10
一个智能指针的小程序,使用模板函数开发,附带测试程序
代码如下:
///////////////////////////////////////////////auto ptr
template<typename T>class AutoPtr{ struct t_ptr { T* __ptr; int __counter; t_ptr(T*ptr) { __ptr = ptr; __counter = 1; }; t_ptr(){__ptr = NULL;__counter = 0;} ~t_ptr(){delete __ptr;} };private: t_ptr* m_ptr;public: AutoPtr(); AutoPtr(T* ptr = NULL); AutoPtr(const AutoPtr& rhs); AutoPtr<T>& operator=(const AutoPtr<T>& rhs); T& operator*(); T*operator->(); ~AutoPtr();private: void _AddRef(); void _DeRef();};////////////////////defination of AutoPtr//////////////////////构造函数template<typename T>AutoPtr<T>::AutoPtr(T* ptr){ m_ptr = new t_ptr(ptr);}//构造函数template<typename T>AutoPtr<T>::AutoPtr(){ m_ptr = new t_ptr();}//拷贝构造函数template<typename T>AutoPtr<T>::AutoPtr(const AutoPtr& rhs):m_ptr(rhs.m_ptr){ _AddRef(); }//赋值操作template<typename T>AutoPtr<T>& AutoPtr<T>::operator=(const AutoPtr<T>& rhs) { if(m_ptr != rhs.m_ptr) { if(NULL != m_ptr)//将要接受新指针,需要将原来的引用计数减掉。 --m_ptr->__counter; m_ptr = rhs.m_ptr; _AddRef(); }}//析构函数template<typename T>AutoPtr<T>::~AutoPtr(){ _DeRef();}/////template<typename T>T& AutoPtr<T>::operator*(){ return *m_ptr->__ptr;}template<typename T>T* AutoPtr<T>::operator->(){ return m_ptr->__ptr;}/////计数器增减操作//////////////template<typename T>void AutoPtr<T>::_AddRef(){ if(NULL != m_ptr) ++m_ptr->__counter;}template<typename T>void AutoPtr<T>::_DeRef(){ if(NULL == m_ptr) return ; --m_ptr->__counter; if(m_ptr->__counter <= 0) delete m_ptr;}
//////////////////////////////////////////////test
//testmain.cpp#include<iostream>#include "AutoPtr.h"using namespace std;class TestClass{ int m_iCounter;public: int Get(){return m_iCounter;} void Set(int iVal){m_iCounter = iVal;}};using namespace std;int main(){ AutoPtr<TestClass> ap(new TestClass); ap->Set(200); cout<<"ap->Get():"<<ap->Get()<<endl; AutoPtr<TestClass>ap2 = ap; cout<<"ap2->Get():"<<ap2->Get()<<endl; ap2->Set(600); cout<<"after ap->Get():"<<ap->Get()<<endl; cout<<"after ap2->Get():"<<ap2->Get()<<endl; return 0;}
- 一个自己实现的简单的智能指针模板类
- 自己实现简单的智能指针
- share_ptr智能指针模板类的简单实现(c++11)
- 一个简单的智能指针的实现
- 一个简单的智能指针的实现
- 智能指针原理,并实现一个简单的智能指针
- 一个简单的智能指针实现
- 一个智能指针的简单实现
- 基于C++实现一个简单的智能指针类
- 一个智能指针模板的实现及应用
- 如何实现一个带引用记数的智能指针模板
- [学习操练]C++智能指针类的简单实现(类模板实现)
- 智能指针的简单实现
- 智能指针的简单实现
- 智能指针的简单实现
- 智能指针的简单实现
- 模仿的智能指针的一个简单实现
- 一个简单的C++智能指针的实现
- 程序员必知 C库<string.h>中memset用法指南
- 11g调度--job使用
- 利用UIScrollView实现图片的放大、缩小和移动查看
- CSS3.0盒模型display:-webkit-box;的使用
- android游戏开发框架libgdx的使用(八)--相机和观察点
- 一个自己实现的简单的智能指针模板类
- jquery EasyUI
- javascript根据日期计算年龄
- 重写strpbrk函数
- oracle 10g 修改SGA,PGA大小
- android游戏开发框架libgdx的使用(九)—在libgdx中使用Box2d
- 关Python的小程序-更换桌面壁纸和下载网页
- NWERC 2012 Joint Venture (二分+枚举)
- assert用法总结