// // 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) { // String& 引用 // 拷贝赋值 是否是自我赋值 // 来源端与目的端是否相同 指针对比地址 &str取地址 if(this == &str){ return *this; } // 目的端 本来存在 delete[] m_data; // 在重新申请一块空间 堆 m_data = new char[strlen(str.m_data) + 1]; strcpy(m_data, str.m_data); return *this; }