UniquePointer.cppm 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. export module Core.UniquePointer;
  2. export namespace Core {
  3. template<typename T>
  4. class UniquePointer final {
  5. T* t;
  6. public:
  7. UniquePointer(T* t_) noexcept : t(t_) {
  8. }
  9. UniquePointer() noexcept : UniquePointer(nullptr) {
  10. }
  11. ~UniquePointer() noexcept {
  12. delete t;
  13. }
  14. UniquePointer(const UniquePointer&) = delete;
  15. UniquePointer& operator=(const UniquePointer&) = delete;
  16. UniquePointer(UniquePointer&& other) noexcept : UniquePointer(other.t) {
  17. other.t = nullptr;
  18. }
  19. UniquePointer& operator=(UniquePointer&& other) noexcept {
  20. if(this != &other) {
  21. delete t;
  22. t = other.t;
  23. other.t = nullptr;
  24. }
  25. return *this;
  26. }
  27. T* operator->() noexcept {
  28. return t;
  29. }
  30. const T* operator->() const noexcept {
  31. return t;
  32. }
  33. operator T*() noexcept {
  34. return t;
  35. }
  36. operator const T*() const noexcept {
  37. return t;
  38. }
  39. };
  40. }