智能指针(STL)
2017-09-30 00:11
281 查看
智能指针(类模板(初))
智能指针并不是一个指针, 它是一个类模板,只是通过封装,使之产生一些与普通指针相似的行为
它的作用: 自动释放所指向的对象
它的拷贝构造,是把旧指针的指针指空, 新指针指向原来的内存空间
它的拷贝赋值的实现,并不是指针的复制,也不是对象的复制,它需要先析构左边的对象, 再把右边的对象转移到左边
数组类型的特例化板本
智能指针并不是一个指针, 它是一个类模板,只是通过封装,使之产生一些与普通指针相似的行为
它的作用: 自动释放所指向的对象
它的拷贝构造,是把旧指针的指针指空, 新指针指向原来的内存空间
它的拷贝赋值的实现,并不是指针的复制,也不是对象的复制,它需要先析构左边的对象, 再把右边的对象转移到左边
template<typename T> class AutoPtr{ public: AutoPtr(T* p=NULL):m_p(p){} //拷贝构造 //要把旧的对象指针指空,新的对象指针指向实例 AutoPtr(AutoPtr& that):m_p(that.release()){} //拷贝赋值 //被赋值的对象要先析构,再把他的指针指向右操作数 //不能自赋值 AutoPtr& operator=(AutoPtr& that){ if(&that != this) reset(that.release()); return *this; } T* operator->(void){ return m_p; } T& operator*(void){ return *m_p; } ~AutoPtr(void){ delete m_p; m_p = NULL; }
private: T* release(void){ T* cmp = m_p; m_p = NULL; return cmp; } void reset(T* p){ if(m_p != p){ delete m_p; m_p = p; } } T* m_p; };
数组类型的特例化板本
template<typename T> class AutoPtr<T[]>{ public: AutoPtr(T* p=NULL):m_p(p){} AutoPtr(AutoPtr& that):m_p(that.release()){} AutoPtr& operator=(AutoPtr& that){ if(&that != this) reset(that.release()); return *this; } T* operator->(void){ return m_p; } T& operator*(void){ return *m_p; } ~AutoPtr(void){ delete [] ]m_p; m_p = NULL; }
private: T* release(void){ T* cmp = m_p; m_p = NULL; return cmp; } void reset(T* p){ if(m_p != p){ delete [] m_p; m_p = p; } } T* m_p; };
相关文章推荐
- stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结
- [置顶] STL中的智能指针(Smart Pointer)及其源码剖析: std::auto_ptr
- [置顶] STL中的智能指针(Smart Pointer)及其源码剖析: std::unique_ptr
- 【STL学习】智能指针之weak_ptr
- STL 智能指针
- Boost和STL的几种智能指针
- STL auto_ptr智能指针简单分析
- C++ (STL BOOST) 智能指针的一些解析
- C++:浅谈c++资源管理以及对[STL]智能指针auto_ptr源码分析,左值与右值
- auto_ptr智能指针不能作为STL标准容器的元素
- 【STL】智能指针auto_ptr
- c++ stl auto_ptr智能指针
- stl智能指针auto_ptr
- 为什么auto_ptr智能指针不能作为STL标准容器的元素
- STL--智能指针(auto_ptr)
- STL之智能指针
- 智能指针_通用工具_STL
- [C++][STL]智能指针:auto_ptr
- 智能指针(一):STL auto_ptr实现原理
- 为什么auto_ptr智能指针不能作为STL标准容器的元素