模拟实现智能指针
来源:互联网 发布:开淘宝网店计划书 编辑:程序博客网 时间:2024/06/08 11:52
智能指针可以用来管理资源,原自构造析构函数(RAII);还可以像原生指针一样使用。
本文为模拟实现auto_ptr,scoped_ptr,shared_ptr,下面为这些指针的特点:
auto_ptr: 管理权限的转移。
scoped_ptr: 防拷贝。
shared_ptr:引用计数解决auto_ptr的缺陷。
其中shared 自身带有一定缺陷,循环引用,和不可释放数组类,文件类等资源,幸运的是它支持定制删除器,以及使用weak_ptr。
关于资源管理:https://github.com/DecVan/EffictiveCplus/tree/chapter_3 有兴趣可以看看,以下为上述智能指针实现代码。
auto_ptr:(测试代码没贴,建议可从基本类型,和自定义类型着手)
template<typename T>class AutoPtr{public:AutoPtr(T* ptr):_ptr(ptr){}AutoPtr(AutoPtr<T>& ap):_ptr(ap._ptr)//管理权限转移{ap._ptr = NULL;}AutoPtr<T>& operator=(AutoPtr<T>& ap){if (this != &ap){delete _ptr;_ptr = ap._ptr;//管理权限转移ap._ptr = NULL;}return *this;}T& operator*(){return *_ptr;}T* operator->(){return _ptr;}~AutoPtr(){if (_ptr){delete _ptr;_ptr = NULL;}}private:T* _ptr;};class TestClass{public:TestClass(int a = 0):_a(a){}public:int _a;};
scoped_ptr:template<typename T>class ScopedPtr{public:ScopedPtr(T* ptr):_ptr(ptr){}T& operator*(){return *_ptr;}T* operator->(){return _ptr;}~ScopedPtr(){if (_ptr){delete _ptr;_ptr = NULL;}}protected://禁止拷贝ScopedPtr(const ScopedPtr<T>& sp);ScopedPtr<T> operator=(const ScopedPtr<T>& sp);private:T* _ptr;};
shared_ptr:
//用以解决释放非基本类型//以数组为例template<typename T>struct deleteArry{void operator()(T* ptr){delete[] ptr;}};//解决循环引用,见上图。template <typename T>class weak_ptr{T* _ptr;public:weak_ptr(const shared_ptr<T>& sp):_ptr(sp._Ptr){}};template<typename T>class SharedPtr{public:SharedPtr(T* ptr):_ptr(ptr), _count(new int(1)){}SharedPtr(SharedPtr<T>& sp):_ptr(sp._ptr), _count(sp._count){(*_count)++;}SharedPtr<T>& operator=(SharedPtr<T>& sp){if (_ptr != sp._ptr)//防止自我赋值{if ( (*_count)-- == 1){delete _ptr;delete _count;}_ptr = sp._ptr;_count = sp._count;(*_count)++;}return *this;}T& operator*(){return *_ptr;}T* operator->(){return _ptr;}~SharedPtr(){if (_ptr){if ((*_count)-- == 1){delete _ptr;delete _count;}_ptr = NULL;_count = NULL;}}private:T* _ptr;int* _count;};
0 0
- 模拟实现智能指针
- 模拟实现智能指针
- 模拟实现智能指针
- 模拟实现智能指针
- 模拟实现智能指针SharePtr
- 智能指针的模拟实现
- C++智能指针(二):模拟实现三种智能指针
- 【干货】share智能指针的模拟实现
- 智能指针:模拟实现auto_ptr,scoped_ptr,shared_ptr
- 智能指针AutoPtr,ScopedPtr的模拟实现
- C++智能指针深层剖析,模拟实现
- 简单模拟实现c++智能指针-指针移交控制权
- 智能指针模拟A
- 智能指针模拟B
- 智能指针模拟C
- 智能指针剖析&模拟
- C++智能指针(二)模拟实现三种智能指针
- 模拟实现auto_ptr、scoped_ptr、shared_ptr等智能指针
- [Application]Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' ...
- jsp不能显示带有中文字符的图片
- 50个极好的bootstrap 后台框架主题下载
- 好用的QT内存分析工具Valgrind
- HTML CSS + DIV实现局部布局
- 模拟实现智能指针
- Android近期学习总结
- 二叉搜索树
- QT之重写滑条类
- 让最小化安装的CentOS 6.8能够浏览网页
- struct模块
- 【转】cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- PHP 阿里云上传
- Docker部署red5流媒体视频播放接口教程