// // Created by dongl on 22-9-25. // #ifndef UNTITLED_STRING_H #define UNTITLED_STRING_H #include #endif //UNTITLED_STRING_H class String { public: // 使用字符数组初始化 String(const char *c_str = nullptr); // 使用String初始化 String(const String &str); // 使用=赋值 重载赋值 String &operator=(const String &str); // 析构 回收 ~String(); // 返回常量 char *get_c_str() const { return m_data; } private: char *m_data; }; inline String::String(const char *c_str) { if (c_str) { // 申请空间 m_data = new char[strlen(c_str) + 1]; // 拷贝 strcpy(m_data, c_str); } else { // 未指定初值 m_data = new char[1]; *m_data = '\0'; } } // 析构 inline String::~String() { delete[] m_data; } // 拷贝 直接初始化构造 inline String::String(const String& str) { m_data = new char[strlen(str.m_data) + 1]; strcpy(m_data,str.m_data); } inline String &String::operator=(const String &str) { // 目的端 本来存在 delete[] m_data; // 在重新申请一块空间 堆 m_data = new char[strlen(str.m_data) + 1]; strcpy(m_data, str.m_data); return *this; }