Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. #include <cstddef>
  2. #include <utility>
  3.  
  4. template<class T>
  5. class UniquePtr  {
  6. private:
  7.     T *ptr = nullptr;
  8.  
  9. public:
  10.     UniquePtr () {}
  11.     UniquePtr (T * const _ptr) : ptr(_ptr) {  }
  12.     UniquePtr (UniquePtr  &&_ptr) {
  13.         ptr = _ptr.ptr;
  14.         _ptr.ptr = nullptr;
  15.     }
  16.  
  17.     UniquePtr& operator=(nullptr_t) {
  18.         delete ptr;
  19.         ptr = nullptr;
  20.         return *this;
  21.     }
  22.  
  23.     UniquePtr& operator=(UniquePtr &&_ptr) {
  24.         delete ptr;
  25.         ptr = _ptr.ptr;
  26.         _ptr.ptr = nullptr;
  27.         return *this;
  28.     }
  29.     ~UniquePtr () {
  30.         delete ptr;
  31.     }
  32.     T& operator*() const {
  33.         return *ptr;
  34.     }
  35.     T* operator->() const {
  36.         return ptr;
  37.     }
  38.     T* release() {
  39.         auto ans = ptr;
  40.         ptr = nullptr;
  41.         return ans;
  42.     }
  43.     void reset(T *_ptr) {
  44.         delete release();
  45.         ptr = _ptr;
  46.     }
  47.     void swap(UniquePtr &_ptr) {
  48.         std :: swap(ptr, _ptr.ptr);
  49.     }
  50.     T* get() const {
  51.         return ptr;
  52.     }
  53.     explicit operator bool() const {
  54.         return ptr;
  55.     }
  56. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement