AmbushedRaccoon

Unique Ptr

Aug 2nd, 2025
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. template<typename T>
  2. class UniquePtr {
  3. private:
  4.     T* ptr;
  5.  
  6. public:
  7.     // Конструктор по умолчанию
  8.     UniquePtr() : ptr(nullptr) {}
  9.  
  10.     // Конструктор с указателем
  11.     explicit UniquePtr(T* rawPtr) : ptr(rawPtr) {}
  12.  
  13.     // Удаляем копирование
  14.     UniquePtr(const UniquePtr&) = delete;
  15.     UniquePtr& operator=(const UniquePtr&) = delete;
  16.  
  17.     // Перемещающий конструктор
  18.     UniquePtr(UniquePtr&& other) noexcept : ptr(other.ptr) {
  19.         other.ptr = nullptr;
  20.     }
  21.  
  22.     // Перемещающее присваивание
  23.     UniquePtr& operator=(UniquePtr&& other) noexcept {
  24.         if (this != &other) {
  25.             delete ptr;
  26.             ptr = other.ptr;
  27.             other.ptr = nullptr;
  28.         }
  29.         return *this;
  30.     }
  31.  
  32.     // Оператор разыменования
  33.     T& operator*() const {
  34.         return *ptr;
  35.     }
  36.  
  37.     // Оператор доступа к членам
  38.     T* operator->() const {
  39.         return ptr;
  40.     }
  41.  
  42.     // Получение сырого указателя
  43.     T* Get() const {
  44.         return ptr;
  45.     }
  46.  
  47.     // Освобождение владения
  48.     T* Release() {
  49.         T* temp = ptr;
  50.         ptr = nullptr;
  51.         return temp;
  52.     }
  53.  
  54.     // Замена указателя
  55.     void Reset(T* newPtr = nullptr) {
  56.         if (ptr != newPtr) {
  57.             delete ptr;
  58.             ptr = newPtr;
  59.         }
  60.     }
  61.  
  62.     // Деструктор
  63.     ~UniquePtr() {
  64.         delete ptr;
  65.     }
  66. };
  67.  
Advertisement
Add Comment
Please, Sign In to add comment