diff options
author | Igor Pavlov <87184205+ip7z@users.noreply.github.com> | 2024-05-14 00:00:00 +0000 |
---|---|---|
committer | Igor Pavlov <87184205+ip7z@users.noreply.github.com> | 2024-05-15 23:55:04 +0500 |
commit | fc662341e6f85da78ada0e443f6116b978f79f22 (patch) | |
tree | 1be1cc402a7a9cbc18d4eeea6b141354c2d559e3 /CPP/Common/AutoPtr.h | |
parent | 5b39dc76f1bc82f941d5c800ab9f34407a06b53a (diff) | |
download | 7zip-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.h | 33 |
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 | ||
6 | template<class T> class CMyAutoPtr | 6 | template<class T> class CMyUniquePtr |
7 | // CMyAutoPtr | ||
7 | { | 8 | { |
8 | T *_p; | 9 | T *_p; |
9 | public: | 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 | } | ||
26 | public: | ||
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 | ||