Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<typename T>
- class UniquePtr {
- private:
- T* ptr;
- public:
- // Конструктор по умолчанию
- UniquePtr() : ptr(nullptr) {}
- // Конструктор с указателем
- explicit UniquePtr(T* rawPtr) : ptr(rawPtr) {}
- // Удаляем копирование
- UniquePtr(const UniquePtr&) = delete;
- UniquePtr& operator=(const UniquePtr&) = delete;
- // Перемещающий конструктор
- UniquePtr(UniquePtr&& other) noexcept : ptr(other.ptr) {
- other.ptr = nullptr;
- }
- // Перемещающее присваивание
- UniquePtr& operator=(UniquePtr&& other) noexcept {
- if (this != &other) {
- delete ptr;
- ptr = other.ptr;
- other.ptr = nullptr;
- }
- return *this;
- }
- // Оператор разыменования
- T& operator*() const {
- return *ptr;
- }
- // Оператор доступа к членам
- T* operator->() const {
- return ptr;
- }
- // Получение сырого указателя
- T* Get() const {
- return ptr;
- }
- // Освобождение владения
- T* Release() {
- T* temp = ptr;
- ptr = nullptr;
- return temp;
- }
- // Замена указателя
- void Reset(T* newPtr = nullptr) {
- if (ptr != newPtr) {
- delete ptr;
- ptr = newPtr;
- }
- }
- // Деструктор
- ~UniquePtr() {
- delete ptr;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment