Advertisement
illfate

Untitled

Mar 12th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. template <typename T>
  2. class UniquePtr {
  3. private:
  4. T* data;
  5. public:
  6. UniquePtr() {
  7. data = new T;
  8. }
  9. UniquePtr(T * ptr) {
  10. data = ptr;
  11. ptr = nullptr;
  12. }
  13. UniquePtr(const UniquePtr&) = delete;
  14. UniquePtr(UniquePtr&& other) {
  15. if (data) {
  16. delete data;
  17. }
  18. data = other.data;
  19. other.data = nullptr;
  20. }
  21. UniquePtr& operator = (const UniquePtr&)=delete;
  22. UniquePtr& operator = (nullptr_t) {
  23. if (data) {
  24. delete data;
  25. }
  26. data = nullptr;
  27. return *this;
  28. }
  29. UniquePtr& operator = (UniquePtr&& other) {
  30. if (data) {
  31. delete data;
  32. }
  33. data = other.data;
  34. other.data = nullptr;
  35. return *this;
  36. }
  37. ~UniquePtr() {
  38. delete data;
  39. }
  40.  
  41. T& operator * () const {
  42. return *data;
  43. }
  44.  
  45. T * operator -> () const {
  46. return data;
  47. }
  48.  
  49. T * Release() {
  50. T* temp = data;
  51. data = nullptr;
  52. return temp;
  53. }
  54.  
  55. void Reset(T * ptr) {
  56. if (data) {
  57. delete data;
  58. }
  59. data = ptr;
  60. }
  61.  
  62. void Swap(UniquePtr& other) {
  63. T* temp = new T;
  64. temp = other.data;
  65. other.data = data;
  66. data = temp;
  67. delete temp;
  68. }
  69.  
  70. T * Get() const {
  71. return data;
  72. }
  73.  
  74.  
  75. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement