C++實現String類
阿新 • • 發佈:2019-02-14
class String{ public: String(const char* str = "") { if (NULL == str){ _str = new char[1 + 4]; _str += 4; *_str = '\0'; } else{ _str = new char[strlen(str) + 1 + 4]; _str += 4; strcpy(_str, str); } GetRef() = 1; } String(const String& s) : _str(s._str) { GetRef()++; } String& operator=(const String& s) { if (_str != s._str){ Release(); _str = s._str; ++GetRef(); } return *this; } ~String() { Release(); } char& operator[](size_t index) { if (GetRef() > 1){ char* temp = new char[strlen(_str) + 1 + 4]; *(int*)temp = 1; temp += 4; strcpy(temp, _str); --GetRef(); _str = temp; } return _str[index]; } const char& operator[](size_t index)const { return _str[index]; } void Release() { if (_str && 0 == --GetRef()){ _str -= 4; delete[] _str; _str = NULL; } } int& GetRef(){ return *((int*)_str - 1); } private: char* _str; }; void FunTest(){ String s("abcd"); String a(s); s[0] = 'q'; } int main(){ FunTest(); return 0; }