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