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

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

相关推荐
C+-C资深大佬11 分钟前
C++风格的命名转换
开发语言·c++
No0d1es14 分钟前
2025年粤港澳青少年信息学创新大赛 C++小学组复赛真题
开发语言·c++
点云SLAM17 分钟前
C++内存泄漏检测之手动记录法(Manual Memory Tracking)
开发语言·c++·策略模式·内存泄漏检测·c++实战·new / delete
好评12420 分钟前
【C++】二叉搜索树(BST):从原理到实现
数据结构·c++·二叉树·二叉搜索树
zylyehuo21 分钟前
error: no matching function for call to ‘ros::NodeHandle::param(const char [11], std::string&, const char [34])’
c++·ros1
码上成长22 分钟前
JavaScript 数组合并性能优化:扩展运算符 vs concat vs 循环 push
开发语言·javascript·ecmascript
打工的小王27 分钟前
java并发编程(三)CAS
java·开发语言
油丶酸萝卜别吃34 分钟前
Mapbox GL JS 表达式 (expression) 条件样式设置 完全指南
开发语言·javascript·ecmascript
爱吃大芒果1 小时前
Flutter for OpenHarmony前置知识:Dart 语法核心知识点总结(下)
开发语言·flutter·dart
Ulyanov1 小时前
从桌面到云端:构建Web三维战场指挥系统
开发语言·前端·python·tkinter·pyvista·gui开发