1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// Common/AutoPtr.h
2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef __COMMON_AUTOPTR_H
4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define __COMMON_AUTOPTR_H
5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
6baa3858d3f5d128a5c8466b700098109edcad5f2repo synctemplate<class T> class CMyAutoPtr
7baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  T *_p;
9baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic:
10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  CMyAutoPtr(T *p = 0) : _p(p) {}
11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  CMyAutoPtr(CMyAutoPtr<T>& p): _p(p.release()) {}
12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  CMyAutoPtr<T>& operator=(CMyAutoPtr<T>& p)
13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    reset(p.release());
15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    return (*this);
16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  ~CMyAutoPtr() { delete _p; }
18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  T& operator*() const { return *_p; }
19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  // T* operator->() const { return (&**this); }
20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  T* get() const { return _p; }
21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  T* release()
22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    T *tmp = _p;
24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    _p = 0;
25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    return tmp;
26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  void reset(T* p = 0)
28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    if (p != _p)
30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      delete _p;
31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    _p = p;
32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif
36