forked from coders-school/modern-cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathunique.cpp
More file actions
71 lines (58 loc) · 1.36 KB
/
Copy pathunique.cpp
File metadata and controls
71 lines (58 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <stdio.h>
#include <utility>
template <typename T>
class uniquePtr{
public:
uniquePtr(T *t) {
myPtr = t;
}
uniquePtr(const T* src) {
myPtr = src;
}
~uniquePtr() {
delete myPtr;
}
uniquePtr(uniquePtr&& src) {
myPtr = src.myPtr;
src.myPtr = nullptr;
}
uniquePtr(const uniquePtr& src) = delete;
T* get() const noexcept {
return myPtr;
}
void reset(T *ptr = nullptr) noexcept {
delete myPtr;
myPtr = ptr;
}
T& operator*() const {
return *myPtr;
}
T* operator->() const noexcept {
return myPtr;
}
uniquePtr<T>& operator=(uniquePtr<T>&& ptr) {
reset(ptr.myPtr);
ptr.myPtr = nullptr;
return *this;
}
uniquePtr<T>& operator=(const uniquePtr<T>& ptr) = delete;
private:
T* myPtr {};
};
int main()
{
int a = 5;
uniquePtr<int> a_ptr (new int (5));
printf("ptr-value=%d\n", *a_ptr.get());
a_ptr.reset(new int (10));
printf("ptr-value=%d\n", *a_ptr.get());
printf("ptr-value=%d\n", *a_ptr);
// uniquePtr<int> b_ptr = a_ptr;
//uniquePtr<int> b_ptr(a_ptr);
uniquePtr<int> b_ptr(std::move(a_ptr));
a_ptr = std::move(b_ptr);
// b_ptr = a_ptr;
printf("ptr-value=%d\n", *a_ptr.get());
// printf("ptr-value=%d\n", *a_ptr.get());
return 0;
}