c++ string类的简单模拟实现

我们简单实现一下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函数也可以改为全局函数再进行友元声明

析构函数就释放空间再改一下值就可以了

相关推荐
南棱笑笑生2 分钟前
20250202本地编译全志R系列的步骤6增加了samba处理项目
开发语言·r语言
好好学习O(∩_∩)O3 分钟前
取模与加减乘除原理,模拟实现代码及相关公式推导
c++·算法
CPU NULL18 分钟前
【蓝桥杯】日志统计
数据结构·c++·算法·蓝桥杯
DARLING Zero two♡1 小时前
C++底层学习预备:模板初阶
开发语言·c++·模板
和风化雨1 小时前
排序算法--希尔排序
c语言·数据结构·c++·算法·排序算法
代数狂人1 小时前
Java泛型深度解析(JDK23)
java·开发语言
遗憾皆是温柔1 小时前
JavaFX - 3D 形状
java·开发语言·ide·学习·3d
肖田变强不变秃2 小时前
自研有限元软件与ANSYS精度对比-Bar2D2Node二维杆单元模型-四连杆实例
c++·有限元·ansys
YxVoyager3 小时前
OpenGL学习笔记(七):Camera 摄像机(视图变换、LookAt矩阵、Camera类的实现)
c++·笔记·图形渲染
美味小鱼3 小时前
Rust场景示例:为什么要使用切片类型
开发语言·rust