export module Core.UniquePointer; export namespace Core { template class UniquePointer final { T* t; public: UniquePointer(T* t_) noexcept : t(t_) { } UniquePointer() noexcept : UniquePointer(nullptr) { } ~UniquePointer() noexcept { delete t; } UniquePointer(const UniquePointer&) = delete; UniquePointer& operator=(const UniquePointer&) = delete; UniquePointer(UniquePointer&& other) noexcept : UniquePointer(other.t) { other.t = nullptr; } UniquePointer& operator=(UniquePointer&& other) noexcept { if(this != &other) { delete t; t = other.t; other.t = nullptr; } return *this; } T* operator->() noexcept { return t; } const T* operator->() const noexcept { return t; } operator T*() noexcept { return t; } operator const T*() const noexcept { return t; } }; }