#ifndef UNIQUEPOINTER_H #define UNIQUEPOINTER_H template class UniquePointer { T* t; public: UniquePointer(T* t_) : t(t_) { } UniquePointer() : UniquePointer(nullptr) { } ~UniquePointer() { delete t; } UniquePointer(const UniquePointer&) = delete; UniquePointer& operator=(const UniquePointer&) = delete; UniquePointer(UniquePointer&& other) : UniquePointer(other.t) { other.t = nullptr; } UniquePointer& operator=(UniquePointer&& other) { if(this != &other) { delete t; t = other.t; other.t = nullptr; } return *this; }; T* operator->() { return t; } const T* operator->() const { return t; } operator T*() { return t; } operator const T*() const { return t; } }; #endif