智能指针的简单实现
来源:互联网 发布:淘宝美工需要什么资质 编辑:程序博客网 时间:2024/05/16 07:06
share_ptr运用对每一个对象进行计数,从而防止资源泄露auto_ptr:template<class T>class AutoPtr{public: AutoPtr(T* ptr) :_ptr(ptr) {} ~AutoPtr() { if (_ptr) { cout << "delete" << _ptr << endl; delete _ptr; _ptr = NULL; } } AutoPtr(AutoPtr<T>& ap) :_ptr(ap._ptr) { ap._ptr = NULL; } AutoPtr& operator=(AutoPtr<T>& ap) { if (this != &ap) { delete _ptr; _ptr = ap._ptr; ap._ptr = NULL; } return *this; }public: T& operator*() { return *_ptr; } T* operator->() { return _ptr; } T* GetPtr() { return _ptr; }protected: T* _ptr;};share_prt:template<class T>class SharedPtr{public: SharedPtr(T* ptr) :_ptr(ptr) , _pCount(new long(1)) {} ~SharedPtr() { _Release(); } SharedPtr(const SharedPtr<T> sp) :_ptr(sp._ptr) , _pCount(sp._pCount) { ++*_pCount; } //传统写法 //SharedPtr& operator=(const SharedPtr<T>& sp) //{ // if (_ptr != sp._ptr) // { // _Release(); // _ptr = sp._ptr; // _pCount = sp._pCount; // ++*_pCount; // } // return *this; //} //现代写法 SharedPtr& operator=(SharedPtr<T> sp) { swap(_ptr, sp._ptr); swap(_pCount, sp._pCount); return *this; }public: T& operator*() { return *_ptr; } T* operator->() { return _ptr; } T* GetPtr() { return _ptr; } long GetCount() { return *_pCount; }protected: void _Release() { if (--*_pCount == 0) { delete _ptr; delete _pCount; } }protected: T* _ptr; long* _pCount;};share_array:template<class T>class SharedArray{public: SharedArray(T* ptr) :_ptr(ptr) , _pCount(new long(1)) {} ~SharedArray() { _Release(); }public: T& operator[](size_t index) { return _ptr[index]; }protected: void _Release() { if (--*_pCount == 0) { delete[] _ptr; delete _pCount; } }protected: T* _ptr; long* _pCount;};//#pragma once//#include<iostream>//#include<string>//template<class T>//class ScopedPtr//{//public:// ScopedPtr(T* ptr)// :_ptr(ptr)// {//// }// ~ScopedPtr()// {// delete _ptr;// }// void Display()// {// cout << (*_ptr) << endl;// }// T& operator*()// {// //assert(_ptr);// return *_ptr;// }//// T* operator->()// {// return _ptr;// }//// T* GetPtr()// {// return _ptr;// }//protected:// T* _ptr;//private:// // ScopedPtr(const ScopedPtr<T>& s);// ScopedPtr& operator=(const ScopedPtr<T> s);//};scorp_ptr:template < typename T >class ScopedPtr {public: ScopedPtr(T * ptr) :_ptr(ptr) {} ~ScopedPtr() { if (NULL != this) { delete _ptr; _ptr = NULL; } }protected: ScopedPtr< T >(ScopedPtr < T>& ap); ScopedPtr <T > opreator = (ScopedPtr & ap); private: T * _ptr;};#include<iostream> using namespace std;int main(){ int* p = new int(1); ScopedPtr<int> sp(p); //ScopedPtr<int> sp1(sp); return 0;}template<typename T>class ScopedPtrArray{public: ScopedPtrArray(T* ptrArr = NULL) :_ptrArr(ptrArr) {} ~ScopedPtrArray() { if (NULL != this) { delete[] _ptrArr; _ptrArr = NULL; } }protected: ScopedPtrArray<T>(ScopedPtrArray<T> & parr); ScopedPtrArray& operator=(ScopedPtrArray<T> & parr);private: T* _ptrArr;};#include<iostream> using namespace std;int main(){ ScopedPtrArray<int> pa(new int[10]); //ScopedPtrArray<int> pa1(pa); return 0;}
0 0
- 智能指针的简单实现
- 智能指针的简单实现
- 智能指针的简单实现
- 智能指针的简单实现
- 智能指针原理,并实现一个简单的智能指针
- 简单实现智能指针
- 智能指针简单实现
- 一个简单的智能指针的实现
- 一个简单的智能指针的实现
- 最简单的智能指针实现方法
- 一个简单的智能指针实现
- shared_ptr智能指针的简单实现
- 智能指针auto_ptr的简单实现
- 简单的计数智能指针实现
- [8]C++智能指针的简单实现
- C++智能指针的简单实现代码
- C++智能指针的简单实现
- 【C++】智能指针auto_ptr的简单实现
- Nginx 缓存配置之官方网址
- lua string 库
- BZOJ 3437: 小P的牧场 (线性dp+斜率优化)
- c++上机实验报告5:数组分离
- JAVA SE中你可能不知道的知识点
- 智能指针的简单实现
- python从入门到..........
- android源码内置语音信箱*86
- Node.js 使用 npm 有问题,转cnpm镜像
- python学习2——if语句、elif、if嵌套、while循环、while嵌套
- 【类反射】类反射的一个引例(USB)
- poj 2229 Sumsets
- Robot Framework自动化测试-元素定位之id、name
- 图片的每点击一次旋转90度, filter和css3属性