AutoPtr.h 620 B

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