提示信息

C++ string 类的模拟实现探讨

心以何安 已关注

模拟实现一个C++的string类是一个很好的练习,用来深入理解内存管理、动态分配以及面向对象的设计原则。以下是一个简化版本的MyString类实现:

  1. #include <iostream>
  2. #include <cstring>
  3. class MyString {
  4. private:
  5. char* data;
  6. size_t length;
  7. public:
  8. // Default constructor
  9. MyString() : data(nullptr), length(0) {}
  10. // Parameterized constructor
  11. MyString(const char* str) {
  12. if (str) {
  13. length = strlen(str);
  14. data = new char[length + 1];
  15. strcpy(data, str);
  16. } else {
  17. data = nullptr;
  18. length = 0;
  19. }
  20. }
  21. // Copy constructor
  22. MyString(const MyString& other) {
  23. length = other.length;
  24. data = new char[length + 1];
  25. strcpy(data, other.data);
  26. }
  27. // Move constructor
  28. MyString(MyString&& other) noexcept : data(other.data), length(other.length) {
  29. other.data = nullptr;
  30. other.length = 0;
  31. }
  32. // Destructor
  33. ~MyString() {
  34. delete[] data;
  35. }
  36. // Copy assignment operator
  37. MyString& operator=(const MyString& other) {
  38. if (this == &other) return *this;
  39. delete[] data;
  40. length = other.length;
  41. data = new char[length + 1];
  42. strcpy(data, other.data);
  43. return *this;
  44. }
  45. // Move assignment operator
  46. MyString& operator=(MyString&& other) noexcept {
  47. if (this == &other) return *this;
  48. delete[] data;
  49. data = other.data;
  50. length = other.length;
  51. other.data = nullptr;
  52. other.length = 0;
  53. return *this;
  54. }
  55. // Other functionalities can be added such as append, find, etc.
  56. // Function to get string data
  57. const char* c_str() const {
  58. return data;
  59. }
  60. // Function to get length of the string
  61. size_t size() const {
  62. return length;
  63. }
  64. };
  65. int main() {
  66. MyString s1("Hello, World!");
  67. MyString s2 = s1; // Copy constructor
  68. MyString s3;
  69. s3 = std::move(s1); // Move assignment
  70. std::cout << "s2: " << s2.c_str() << std::endl;
  71. std::cout << "s3: " << s3.c_str() << std::endl;
  72. std::cout << "s3 size: " << s3.size() << std::endl;
  73. return 0;
  74. }

关键点解析:

  1. 构造函数

    • 默认构造函数初始化为空字符串。
    • 有参构造函数从C风格的字符串初始化MyString
  2. 复制控制

    • 复制构造函数和复制赋值运算符负责深拷贝。
    • 移动构造函数和移动赋值运算符负责高效移动资源(通过指针重定向)。
  3. 析构函数

    • 在对象生命周期结束时释放分配的内存。
  4. 其他功能

    • 提供了基础功能如获取字符串内容和长度,可以根据需求扩展其他字符串操作(如拼接、查找等)。

该实现没有包含完整的功能和边界检测,是用于概念展示的简单版本。在实际使用中可能需要考虑更多的边界情况和优化。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
心以何安 关注 已关注

最近一次登录:2024-11-19 21:05:13   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图