Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. #include "xfstr.h"
  2.  
  3. xfstr::~xfstr()
  4. {
  5. std::cout << "xfstr deconstructor\n";
  6. delete[] m_data;
  7. }
  8.  
  9. xfstr::xfstr()
  10. {
  11. std::cout << "xfstr default constructor\n";
  12. m_size = 0;
  13. m_cap = 1;
  14. m_data = new char(0);
  15. }
  16.  
  17. xfstr::xfstr(size_t len)
  18. {
  19. std::cout << "xfstr len constructor\n";
  20. m_size = len;
  21. m_cap = len + 1;
  22. m_data = new char[m_cap];
  23. *(m_data + m_size) = 0;
  24. }
  25.  
  26. xfstr::xfstr(const char* c)
  27. {
  28. std::cout << "xfstr const char* constructor\n";
  29. m_size = strlen(c);
  30. m_cap = m_size + 1;
  31. m_data = new char[m_cap];
  32. strcpy_s(m_data, m_cap, c);
  33. }
  34.  
  35. xfstr::xfstr(xfstr&& str) noexcept
  36. {
  37. std::cout << "xfstr rvalue copy constructor\n";
  38. m_size = str.m_size;
  39. m_cap = str.m_cap;
  40. m_data = str.m_data;
  41. str.m_data = nullptr;
  42. }
  43.  
  44. xfstr::xfstr(const xfstr& str)
  45. {
  46. std::cout << "xfstr copy constructor\n";
  47. m_size = str.m_size;
  48. m_cap = str.m_cap;
  49. m_data = new char[m_cap];
  50. strcpy_s(m_data, m_cap, str.m_data);
  51. }
  52.  
  53. xfstr& xfstr::operator=(const char* c) noexcept
  54. {
  55. std::cout << "xfstr const char* assignment operator\n";
  56. delete[] m_data;
  57. m_size = strlen(c);
  58. m_cap = m_size + 1;
  59. m_data = new char[m_cap];
  60. strcpy_s(m_data, m_cap, c);
  61. return *this;
  62. }
  63.  
  64. xfstr& xfstr::operator=(xfstr&& str) noexcept
  65. {
  66. std::cout << "xfstr rvalue assignment operator\n";
  67. delete[] m_data;
  68. m_size = str.m_size;
  69. m_cap = str.m_cap;
  70. m_data = str.m_data;
  71. str.m_data = nullptr;
  72. return *this;
  73. }
  74.  
  75. xfstr& xfstr::operator=(const xfstr& str)
  76. {
  77. if (this != &str) {
  78. std::cout << "xfstr assignment operator\n";
  79. delete[] m_data;
  80. m_size = str.m_size;
  81. m_cap = str.m_cap;
  82. m_data = new char[m_cap];
  83. strcpy_s(m_data, m_cap, str.m_data);
  84. return *this;
  85. }
  86. }
  87.  
  88. std::ostream& operator<<(std::ostream& s, const xfstr& str)
  89. {
  90. return s << str.c_str();
  91. }
  92.  
  93. char* xfstr::begin() const
  94. {
  95. return m_data;
  96. }
  97.  
  98. char* xfstr::end() const
  99. {
  100. return m_data + m_size;
  101. }
  102.  
  103. char* xfstr::c_str() const
  104. {
  105. return m_data;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement