Advertisement
Guest User

Untitled

a guest
Oct 21st, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. #include <cstddef>
  2. #include <utility>
  3.  
  4. template<typename T>
  5. struct UniquePtr {
  6. T * a;
  7.  
  8. UniquePtr() {
  9. a = nullptr;
  10. }
  11.  
  12. UniquePtr(T * b) {
  13. a = b;
  14. }
  15.  
  16. void Delete() {
  17. delete a;
  18. }
  19.  
  20. UniquePtr(UniquePtr<T> && b) {
  21. a = b.a;
  22. b.a = nullptr;
  23. }
  24.  
  25. UniquePtr& operator =(UniquePtr && b) {
  26. this->~UniquePtr();
  27. a = b.a;
  28. b.a = nullptr;
  29. return *this;
  30. }
  31.  
  32. T& operator*() {
  33. return *a;
  34. }
  35.  
  36. T const & operator*() const {
  37. return *a;
  38. }
  39.  
  40. T* operator->() const {
  41. return a;
  42. }
  43.  
  44. UniquePtr& operator =(std::nullptr_t) {
  45. reset(nullptr);
  46. return *this;
  47. }
  48.  
  49. UniquePtr (UniquePtr<T> & a) = delete;
  50.  
  51. ~UniquePtr() {
  52. delete a;
  53. a = nullptr;
  54. }
  55.  
  56. T * release() {
  57. T * copy = a;
  58. a = nullptr;
  59. return copy;
  60. }
  61.  
  62. void reset(T * ptr) {
  63. *this = std::move(UniquePtr<T>(ptr));
  64. }
  65.  
  66. void swap(UniquePtr& other) {
  67. std::swap(a, other.a);
  68. }
  69.  
  70. T * get() const {
  71. return a;
  72. }
  73.  
  74. explicit operator bool() const {
  75. return a;
  76. }
  77.  
  78. UniquePtr& operator =(const UniquePtr&) = delete;
  79. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement