我们简单实现一下string的逻辑所以成员变量就只实现str指针和大小length就可以了。
默认构造我们选择通过初始化列表实现
cpp
String() : _str(nullptr), _length(0) {}
字符串传值构造我们要进行深拷贝
cpp
String(const String& other) {
_length = other._length;
if (_length > 0) {
_str = new char[_length + 1];
std::strcpy(_str, other._str);
}
else {
_str = nullptr;
}
}
赋值=的operator我们可以使用传统方法和拷贝构造一样也可以使用拷贝交换实现
cpp
String& operator=(String other) { // 注意这里是按值传递,会调用拷贝构造函数
swap(other); // 交换当前对象与临时对象的内容
return *this; // 返回当前对象的引用
}
// 交换成员函数
void swap(String& other) noexcept {
std::swap(_str, other._str);
std::swap(_length, other._length);
}
这里的swap函数也可以改为全局函数再进行友元声明
析构函数就释放空间再改一下值就可以了