vc 下和Linux 下的auto_ptr源码剖析
2016-09-08 19:08
344 查看
1.vc template<class _Ty> class auto_ptr { public: typedef _Ty element_type; auto_ptr(_Ty *_P = 0) : _Owns(_P != 0), _Ptr(_P) {} //拷贝构造 将_Y的管理权_Owns = false 释放后将指针赋值过去 auto_ptr(const auto_ptr<_Ty>& _Y) : _Owns(_Y._Owns), _Ptr(_Y.release()) {} auto_ptr<_Ty>& operator=(const auto_ptr<_Ty>& _Y) _THROW0() { if(this != &_Y)//防止字赋值 { if (_Ptr != _Y.get()) { if (_Owns) delete _Ptr;//当Owns为真的时候,释放其ptr所指的空间 _Owns = _Y._Owns; } else if (_Y._Owns) _Owns = true; _Ptr = _Y.release();// } return (*this); } ~auto_ptr() { //程序结束时析构函数被调用,释放空间 if (_Owns) delete _Ptr; } //重载*后,具有和指针相似的访问形式 _Ty& operator*() const _THROW0() { return (*get()); } _Ty *operator->() const _THROW0() { return (get()); } _Ty *get() const _THROW0() { return (_Ptr); } _Ty *release() const _THROW0()//只是将Owns置为false,没有改变指针指向 { ((auto_ptr<_Ty> *)this)->_Owns = false; return (_Ptr); } private: bool _Owns; _Ty *_Ptr; }; int main() { int *p = (int *)malloc(sizeof(int)); *p = 3; int *q = (int *)malloc(sizeof(int)); *q = 5; auto_ptr<int> pa(p); auto_ptr<int> pb(q); pa = pb; cout<<*pa<<endl;//此时输出都是5 cout<<*pb<<endl;//输出5 return 0; } 如上图 2.linux
template<class _Ty> class auto_ptr { public: explicit auto_ptr(_Ty *p = 0):_M_Ptr(p) { } ~auto_ptr() { delete _M_Ptr; } auto_ptr(auto_ptr<_Ty> &_Y):_M_Ptr(_Y.release()) { } _Ty& operator *() { return *_M_Ptr; } _Ty& operator ->() { return (*this)->_M_Ptr; } auto_ptr<_Ty> &operator =(auto_ptr<_Ty> & _Y)//不同之处 { reset(_Y.release()); return *this; } _Ty* release() { _Ty *_tmp = _M_Ptr; _M_Ptr = 0;//linux下将指针置为空,此时若访问转移权限 return _tmp; } void reset(_Ty *_ptr = 0)//重置对指针的管理 { _Ty * _pt = _M_Ptr; if(_ptr!=_pt) { delete _pt;//先delete掉前指针的空间,避免造成内存泄漏 } _M_Ptr = _ptr; } private: _Ty* _M_Ptr;//与vc下不同的是没有权限标志 };
pb连访问的机会也失去了。。。。。
如有错误,欢迎前辈们指点,嘿嘿。
相关文章推荐
- 智能指针之auto_ptr源码剖析
- [置顶] STL中的智能指针(Smart Pointer)及其源码剖析: std::auto_ptr
- auto_ptr源码剖析
- 智能指针之auto_ptr源码剖析
- auto_ptr源码剖析
- 智能指针auto_ptr源码剖析
- 智能指针之auto_ptr源码剖析
- vs和vc智能指针(smart_ptr)框架源码剖析
- 智能指针之auto_ptr源码剖析
- auto_ptr源码剖析
- auto_ptr源码剖析
- Linux进程间通信源码剖析,共享内存(shmget函数详解)
- Linux进程间通信源码剖析,共享内存(shmget函数详解)
- Linux进程间通信源码剖析,共享内存(shmget函数详解)
- (转)剖析C++标准库智能指针(std::auto_ptr)
- auto_ptr深入剖析
- C++ Standard Stl -- SGI STL源码学习笔记(01) auto_ptr
- 剖析C++标准库智能指针(std::auto_ptr)
- zz:剖析C++标准库智能指针(std::auto_ptr)
- 详解linux下auto工具制作Makefile源码包(制作篇)