UniquePointer.cppm 1.0 KB

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