Advertisement
illfate

Untitled

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