Advertisement
Guest User

Untitled

a guest
Feb 18th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 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.     UniquePtr() :ptr(nullptr) {}
  12.  
  13.     UniquePtr(T *p) : ptr(p) {}
  14.  
  15.     UniquePtr(UniquePtr && p) : ptr(p.ptr) {
  16.         p.ptr = nullptr;
  17.     }
  18.  
  19.     UniquePtr(const UniquePtr & p) noexcept = delete;
  20.  
  21.     T * release() {
  22.         T *tmp = ptr;
  23.         ptr = nullptr;
  24.         return tmp;
  25.     }
  26.  
  27.     void reset(T *p) {
  28.         T* tmp = ptr;
  29.         ptr = p;
  30.         if (tmp != nullptr) {
  31.             delete(tmp);
  32.         }
  33.     }
  34.  
  35.     ~UniquePtr() {
  36.         reset(0);
  37.     }
  38.  
  39.     UniquePtr &operator=(UniquePtr&& p) {
  40.         this->reset(p.release());
  41.         return *this;
  42.     }
  43.  
  44.     UniquePtr &operator=(const UniquePtr& p) noexcept = delete;
  45.  
  46.     UniquePtr& operator = (std::nullptr_t p) {
  47.         ptr = nullptr;
  48.         return *this;
  49.     }
  50.  
  51.     T operator*() const {
  52.         return *ptr;
  53.     }
  54.  
  55.     T operator*() {
  56.         return *ptr;
  57.     }
  58.  
  59.     T * operator->() const {
  60.         return ptr;
  61.     }
  62.  
  63.     T * operator->() {
  64.         return ptr;
  65.     }
  66.  
  67.     void swap(UniquePtr &p) {
  68.         std::swap(ptr, p.ptr);
  69.     }
  70.  
  71.     T * get() const {
  72.         return ptr;
  73.     }
  74.  
  75.     explicit operator bool() const {
  76.         if (ptr != 0) {
  77.             return true;
  78.         } else {
  79.             return false;
  80.         }
  81.     }
  82. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement