【C++标准库】模拟实现string+深浅拷贝问题
#include <iostream>
#include <cstring>
class MyString {
private:
char* str;
public:
// 构造函数
MyString(const char* s = "") {
str = new char[strlen(s) + 1];
strcpy(str, s);
}
// 拷贝构造函数
MyString(const MyString& ms) {
str = new char[strlen(ms.str) + 1];
strcpy(str, ms.str);
}
// 赋值运算符重载
MyString& operator=(const MyString& ms) {
if (this != &ms) {
delete[] str; // 释放原有内存
str = new char[strlen(ms.str) + 1];
strcpy(str, ms.str);
}
return *this;
}
// 析构函数
~MyString() {
delete[] str;
}
// 获取字符串
const char* c_str() const {
return str;
}
};
int main() {
MyString s1("Hello");
MyString s2 = s1; // 深拷贝
MyString s3("World");
s3 = s1; // 深拷贝
std::cout << "s1: " << s1.c_str() << std::endl;
std::cout << "s2: " << s2.c_str() << std::endl;
std::cout << "s3: " << s3.c_str() << std::endl;
return 0;
}
这段代码定义了一个简单的MyString
类,用于模拟std::string
的功能。它展示了如何实现深拷贝,即在对象被复制时创建一个新的内存副本。代码中包含了构造函数、拷贝构造函数、赋值运算符重载和析构函数,它们负责在对象的生命周期内管理字符串内存的分配和释放。
评论已关闭