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函数也可以改为全局函数再进行友元声明

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

相关推荐
Aurorar0rua4 分钟前
CS50 x 2024 Notes Python - 02
开发语言·python·学习方法
zyseo813 分钟前
谷歌SEO 网站迁移 301 映射脚本:旧站 URL 自动匹配新站结构
开发语言·python
cu14319 分钟前
细谈IT65631的具体功能与其应用
c++·单片机·嵌入式硬件
清水白石00823 分钟前
React Native与Flutter长期维护成本对比
开发语言·数据库
幻智星科技26 分钟前
Karatsuba与CSD优化FPGA大数乘法
c++·fpga开发·密码学
麦序子27 分钟前
用 Python + python-docx 批量生成带表格样式的装修报价单 Word 文档(含合计公式)
开发语言·python·自然语言处理·word·python3.11
1-1=036 分钟前
Python PyCharm
开发语言·python·pycharm
牛肉胡辣汤41 分钟前
Blender + Three.js 开发讲解:从 .blend 到能转的产品页
开发语言·javascript·blender
惊讶的猫43 分钟前
Spring AOP
java·开发语言
flower98032344 分钟前
C++消息总线软件开发框架AI重构版
c++·设计模式·架构