aboutsummaryrefslogtreecommitdiff
path: root/CPP/Common/AutoPtr.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--CPP/Common/AutoPtr.h33
1 files changed, 22 insertions, 11 deletions
diff --git a/CPP/Common/AutoPtr.h b/CPP/Common/AutoPtr.h
index 0be8a7a..e3c5763 100644
--- a/CPP/Common/AutoPtr.h
+++ b/CPP/Common/AutoPtr.h
@@ -3,20 +3,32 @@
3#ifndef ZIP7_INC_COMMON_AUTOPTR_H 3#ifndef ZIP7_INC_COMMON_AUTOPTR_H
4#define ZIP7_INC_COMMON_AUTOPTR_H 4#define ZIP7_INC_COMMON_AUTOPTR_H
5 5
6template<class T> class CMyAutoPtr 6template<class T> class CMyUniquePtr
7// CMyAutoPtr
7{ 8{
8 T *_p; 9 T *_p;
9public: 10
10 CMyAutoPtr(T *p = NULL) : _p(p) {} 11 CMyUniquePtr(CMyUniquePtr<T>& p); // : _p(p.release()) {}
11 CMyAutoPtr(CMyAutoPtr<T>& p): _p(p.release()) {} 12 CMyUniquePtr<T>& operator=(T *p);
12 CMyAutoPtr<T>& operator=(CMyAutoPtr<T>& p) 13 CMyUniquePtr<T>& operator=(CMyUniquePtr<T>& p);
14 /*
13 { 15 {
14 reset(p.release()); 16 reset(p.release());
15 return (*this); 17 return (*this);
16 } 18 }
17 ~CMyAutoPtr() { delete _p; } 19 */
20 void reset(T* p = NULL)
21 {
22 if (p != _p)
23 delete _p;
24 _p = p;
25 }
26public:
27 CMyUniquePtr(T *p = NULL) : _p(p) {}
28 ~CMyUniquePtr() { delete _p; }
18 T& operator*() const { return *_p; } 29 T& operator*() const { return *_p; }
19 // T* operator->() const { return (&**this); } 30 T* operator->() const { return _p; }
31 // operator bool() const { return _p != NULL; }
20 T* get() const { return _p; } 32 T* get() const { return _p; }
21 T* release() 33 T* release()
22 { 34 {
@@ -24,11 +36,10 @@ public:
24 _p = NULL; 36 _p = NULL;
25 return tmp; 37 return tmp;
26 } 38 }
27 void reset(T* p = NULL) 39 void Create_if_Empty()
28 { 40 {
29 if (p != _p) 41 if (!_p)
30 delete _p; 42 _p = new T;
31 _p = p;
32 } 43 }
33}; 44};
34 45