成员变量
class string{public: private:char* _str;size_t _size;size_t _capacity;};
构造函数
string()//1:_str(new char[1])//:_str(nullptr),_size(0),_capacity(0){_str[0] = '\0';}
new char[1]为了统一析构数组
string(const char* str = "\0"):_size(strlen(str)){_capacity = _size;_str = new char[_capacity + 1];strcpy(_str, str);}
建议把_capacity定义放在里面,和_size错开,因为初始化顺序是,定义的顺序。
string(const char* str = '\0') 右边是char类型,不能转化为const char* 类型
string(const char* str = nullptr) 这样的话,下面的strlen会报错
拷贝构造
string(const string& str):_size(str._size), _capacity(str._capacity){_str = new char[_capacity + 1];strcpy(_str, str._str);}
new char(),会在析构错误
[]运算符重载
char& operator[](size_t pos){assert(pos < _size);return _str[pos];}const char& operator[](size_t pos) const{assert(pos < _size);return _str[pos];}
析构函数
~string(){delete[] _str;_size = 0;_capacity = 0;}