1 // Common/AutoPtr.h 2 3 #ifndef ZIP7_INC_COMMON_AUTOPTR_H 4 #define ZIP7_INC_COMMON_AUTOPTR_H 5 6 template<class T> class CMyUniquePtr 7 // CMyAutoPtr 8 { 9 T *_p; 10 11 CMyUniquePtr(CMyUniquePtr<T>& p); // : _p(p.release()) {} 12 CMyUniquePtr<T>& operator=(T *p); 13 CMyUniquePtr<T>& operator=(CMyUniquePtr<T>& p); 14 /* 15 { 16 reset(p.release()); 17 return (*this); 18 } 19 */ 20 void reset(T* p = NULL) 21 { 22 if (p != _p) 23 delete _p; 24 _p = p; 25 } 26 public: _p(p)27 CMyUniquePtr(T *p = NULL) : _p(p) {} ~CMyUniquePtr()28 ~CMyUniquePtr() { delete _p; } 29 T& operator*() const { return *_p; } 30 T* operator->() const { return _p; } 31 // operator bool() const { return _p != NULL; } get()32 T* get() const { return _p; } release()33 T* release() 34 { 35 T *tmp = _p; 36 _p = NULL; 37 return tmp; 38 } Create_if_Empty()39 void Create_if_Empty() 40 { 41 if (!_p) 42 _p = new T; 43 } 44 }; 45 46 #endif 47