#ifndef MYAUTOPTR_H #define MYAUTOPTR_H template<typename _T> class MyAutoPtr { private: _T* _ptr; public: typedef _T element_type; explicit MyAutoPtr(element_type * ptr = 0) { _ptr = ptr; } ~MyAutoPtr() { // delete 空指針也無妨 delete _ptr; } MyAutoPtr(MyAutoPtr<_T>& a) { _ptr = a.release(); } MyAutoPtr& operator=(MyAutoPtr<_T>& a) { reset(a.release()); return *this; } void reset(element_type* ptr = 0) { // 直接釋放原來的,設置如今的 if (ptr != _ptr) { delete _ptr; _ptr = ptr; } } element_type * release() { // release 只是轉移指針 element_type * tmp = _ptr; _ptr = 0; return tmp; } element_type* operator->() { return _ptr; } element_type& operator*() { return *_ptr; } }; #endif /* MYAUTOPTR_H */
可能 auto_ptr 最使人詬病的就是指針全部權轉移的缺陷,不過簡單的場合使用起來仍是很是方便。this