//【C++】智能指针auto_ptr的简单实现 #include <iostream> using namespace std; template <class _Ty> class auto_ptr { public: auto_ptr(_Ty *_P = 0) :_Owns(_Ptr != 0), _Ptr(_P) {} auto_ptr<_Ty>(const auto_ptr <_Ty> &p):_Owns(p._Owns),_Ptr(p.release()) //拷贝构造 {} auto_ptr<_Ty>& operator=(const auto_ptr<_Ty> &_Y) //赋值语句 { if(this != &_Y) { if(_Ptr != _Y._Ptr) { if(_Owns) delete _Ptr; _Owns = _Y._Owns; } else { _Owns = _Y._Owns; } _Ptr = _Y.release(); } return *this; } ~auto_ptr() { if (_Owns) { delete _Ptr; } } public: _Ty* release()const //交换拥有者 { ((auto_ptr<_Ty>*const)this)->_Owns = false; return _Ptr; } _Ty*get() const { return _Ptr; } _Ty& operator*() const { return (*get()); } _Ty* operator->() const { return get(); } private: _Ty *_Ptr; bool _Owns; }; int main() { int *p = new int(10); auto_ptr<int> pa(p); auto_ptr<int> pa1(pa); auto_ptr<int> pa2=pa1; cout<<*pa<<endl; cout<<*pa1<<endl; cout<<*pa2<<endl; return 0; }
时间: 2024-12-24 16:40:44