Advertisement
Guest User

Untitled

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