1370b324cSopenharmony_ci// Common/AutoPtr.h 2370b324cSopenharmony_ci 3370b324cSopenharmony_ci#ifndef ZIP7_INC_COMMON_AUTOPTR_H 4370b324cSopenharmony_ci#define ZIP7_INC_COMMON_AUTOPTR_H 5370b324cSopenharmony_ci 6370b324cSopenharmony_citemplate<class T> class CMyAutoPtr 7370b324cSopenharmony_ci{ 8370b324cSopenharmony_ci T *_p; 9370b324cSopenharmony_cipublic: 10370b324cSopenharmony_ci CMyAutoPtr(T *p = NULL) : _p(p) {} 11370b324cSopenharmony_ci CMyAutoPtr(CMyAutoPtr<T>& p): _p(p.release()) {} 12370b324cSopenharmony_ci CMyAutoPtr<T>& operator=(CMyAutoPtr<T>& p) 13370b324cSopenharmony_ci { 14370b324cSopenharmony_ci reset(p.release()); 15370b324cSopenharmony_ci return (*this); 16370b324cSopenharmony_ci } 17370b324cSopenharmony_ci ~CMyAutoPtr() { delete _p; } 18370b324cSopenharmony_ci T& operator*() const { return *_p; } 19370b324cSopenharmony_ci // T* operator->() const { return (&**this); } 20370b324cSopenharmony_ci T* get() const { return _p; } 21370b324cSopenharmony_ci T* release() 22370b324cSopenharmony_ci { 23370b324cSopenharmony_ci T *tmp = _p; 24370b324cSopenharmony_ci _p = NULL; 25370b324cSopenharmony_ci return tmp; 26370b324cSopenharmony_ci } 27370b324cSopenharmony_ci void reset(T* p = NULL) 28370b324cSopenharmony_ci { 29370b324cSopenharmony_ci if (p != _p) 30370b324cSopenharmony_ci delete _p; 31370b324cSopenharmony_ci _p = p; 32370b324cSopenharmony_ci } 33370b324cSopenharmony_ci}; 34370b324cSopenharmony_ci 35370b324cSopenharmony_ci#endif 36