Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "xfstr.h"
- xfstr::~xfstr()
- {
- std::cout << "xfstr deconstructor\n";
- delete[] m_data;
- }
- xfstr::xfstr()
- {
- std::cout << "xfstr default constructor\n";
- m_size = 0;
- m_cap = 1;
- m_data = new char(0);
- }
- xfstr::xfstr(size_t len)
- {
- std::cout << "xfstr len constructor\n";
- m_size = len;
- m_cap = len + 1;
- m_data = new char[m_cap];
- *(m_data + m_size) = 0;
- }
- xfstr::xfstr(const char* c)
- {
- std::cout << "xfstr const char* constructor\n";
- m_size = strlen(c);
- m_cap = m_size + 1;
- m_data = new char[m_cap];
- strcpy_s(m_data, m_cap, c);
- }
- xfstr::xfstr(xfstr&& str) noexcept
- {
- std::cout << "xfstr rvalue copy constructor\n";
- m_size = str.m_size;
- m_cap = str.m_cap;
- m_data = str.m_data;
- str.m_data = nullptr;
- }
- xfstr::xfstr(const xfstr& str)
- {
- std::cout << "xfstr copy constructor\n";
- m_size = str.m_size;
- m_cap = str.m_cap;
- m_data = new char[m_cap];
- strcpy_s(m_data, m_cap, str.m_data);
- }
- xfstr& xfstr::operator=(const char* c) noexcept
- {
- std::cout << "xfstr const char* assignment operator\n";
- delete[] m_data;
- m_size = strlen(c);
- m_cap = m_size + 1;
- m_data = new char[m_cap];
- strcpy_s(m_data, m_cap, c);
- return *this;
- }
- xfstr& xfstr::operator=(xfstr&& str) noexcept
- {
- std::cout << "xfstr rvalue assignment operator\n";
- delete[] m_data;
- m_size = str.m_size;
- m_cap = str.m_cap;
- m_data = str.m_data;
- str.m_data = nullptr;
- return *this;
- }
- xfstr& xfstr::operator=(const xfstr& str)
- {
- if (this != &str) {
- std::cout << "xfstr assignment operator\n";
- delete[] m_data;
- m_size = str.m_size;
- m_cap = str.m_cap;
- m_data = new char[m_cap];
- strcpy_s(m_data, m_cap, str.m_data);
- return *this;
- }
- }
- std::ostream& operator<<(std::ostream& s, const xfstr& str)
- {
- return s << str.c_str();
- }
- char* xfstr::begin() const
- {
- return m_data;
- }
- char* xfstr::end() const
- {
- return m_data + m_size;
- }
- char* xfstr::c_str() const
- {
- return m_data;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement