一个简单的智能指针的实现
来源:互联网 发布:淘宝客收入 编辑:程序博客网 时间:2024/04/29 16:44
#include <iostream>using namespace std;// 一个简单的智能指针的实现template <class T>class SmartPtr{public: // 构造函数:p是指向已经动态创建的int对象指针 SmartPtr(T *p) : m_pHelpPtr(new HelpPtr<T>(p)) { } // 复制构造函数:复制成员并将使用计数加1 SmartPtr(const SmartPtr& orig) : m_pHelpPtr(orig.m_pHelpPtr) { ++m_pHelpPtr->refCount; } // 赋值操作符 SmartPtr& operator=(const SmartPtr& rhs) { // 增加右操作数中的使用计数 ++rhs.m_pHelpPtr->refCount; // 将左操作数对象的使用计数减1,若该对象的使用计数减至0,则删除该对象 if (--m_pHelpPtr->refCount == 0) delete m_pHelpPtr; m_pHelpPtr = rhs.m_pHelpPtr; // 复制HelpPtr指针 return *this; } // 析构函数:如果计数为0,则删除HelpPtr对象 ~SmartPtr() { if (--m_pHelpPtr->refCount == 0) delete m_pHelpPtr; } T& operator *() //重载*操作符 { return *(m_pHelpPtr->ptr); } T* operator ->() //重载->操作符 { return m_pHelpPtr->ptr; }private: // 一个助手类,实现了引用计数,存放了实际的数据 template <class X> class HelpPtr { public: X *ptr; size_t refCount; HelpPtr(X *p) : ptr(p) , refCount(1) { //cout << "HelpPtr constructor called !" << endl; } ~HelpPtr() { delete ptr; //cout << "HelpPtr distructor called !" << endl; } }; HelpPtr<T> *m_pHelpPtr; //指向使用计数类HelpPtr};int main(void){ { int *pi = new int(42); SmartPtr<int> p = pi; p = p; cout << *p << endl; SmartPtr<int> p1 = p; SmartPtr<int> p2 = p1; p = p2; p1 = p; p2 = p1; p1 = p2; p2 = p1; } return 0;}
0 0
- 一个简单的智能指针的实现
- 一个简单的智能指针的实现
- 智能指针原理,并实现一个简单的智能指针
- 一个简单的智能指针实现
- 一个智能指针的简单实现
- 智能指针的简单实现
- 智能指针的简单实现
- 智能指针的简单实现
- 智能指针的简单实现
- 一个自己实现的简单的智能指针模板类
- 模仿的智能指针的一个简单实现
- 一个简单的C++智能指针的实现
- 一个智能指针的实现
- ADA程序实例(一个简单的智能指针实现)
- 基于C++实现一个简单的智能指针类
- 请简述智能指针原理,并实现一个简单的智能指针。
- 最简单的智能指针实现方法
- shared_ptr智能指针的简单实现
- Dockerfile最佳实践(一)
- Python和shell中Base64编码使用那些事
- 工厂模式(三)--抽象工厂模式
- 纹理特征LBP(local binary pattern,局部二值模式)
- SSH框架从底层数据库到jsp页面响应流程及注意事项
- 一个简单的智能指针的实现
- 字符串函数
- 将url或者字符串转换成MD5格式(md5加密算法)的写法
- Swift 2.2 基础语法
- Problem C
- kafka_2.9.2-0.8.1.1安装、测试、集群
- MONGODB范围查询
- 【Spring】【笔记】《Spring In Action》第一章 读书笔记
- Android声明和使用权限