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 分钟前
Pinely Round 2 (Div. 1 + Div. 2)
c++·算法
缘三水2 分钟前
【C语言】15.指针(5)
c语言·开发语言·指针·语法
爱吃大芒果4 分钟前
从零开始学 Flutter:状态管理入门之 setState 与 Provider
开发语言·javascript·flutter
清风拂山岗 明月照大江11 分钟前
简单文件 IO 示例:使用系统调用读写文件
开发语言·c++·算法
技术净胜13 分钟前
MATLAB文本文件读写实操fopen/fscanf/fprintf/fclose全解析
开发语言·matlab
编织幻境的妖20 分钟前
Python垃圾回收机制详解
开发语言·python
BrianGriffin20 分钟前
JS異步:setTimeout包裝為sleep
开发语言·javascript·ecmascript
遇印记21 分钟前
javaOCA考点(基础)
java·开发语言·青少年编程
学困昇35 分钟前
Linux基础开发工具(下):调试器gdb/cgdb的使用详解
linux·运维·服务器·开发语言·c++
ULTRA??38 分钟前
C++数据结构的链表实现模拟
c++·链表