aboutsummaryrefslogtreecommitdiff
path: root/CPP/Common/AutoPtr.h
diff options
context:
space:
mode:
authorIgor Pavlov <87184205+ip7z@users.noreply.github.com>2024-05-14 00:00:00 +0000
committerIgor Pavlov <87184205+ip7z@users.noreply.github.com>2024-05-15 23:55:04 +0500
commitfc662341e6f85da78ada0e443f6116b978f79f22 (patch)
tree1be1cc402a7a9cbc18d4eeea6b141354c2d559e3 /CPP/Common/AutoPtr.h
parent5b39dc76f1bc82f941d5c800ab9f34407a06b53a (diff)
download7zip-24.05.tar.gz
7zip-24.05.tar.bz2
7zip-24.05.zip
24.0524.05
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