Advertisement
Guest User

Untitled

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