c++ std::string 深浅拷贝
时间: 2024-03-11 21:42:48 浏览: 20
c++的std::string类使用深拷贝来管理字符串的内存。深拷贝是指在拷贝构造函数中,会为新的对象分配一块新的内存,并将原始对象的数据复制到新的内存中。这样,原始对象和新对象就完全独立了,对其中一个对象的修改不会影响到另一个对象。
下面是一个示例,演示了std::string的深拷贝[^1]:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
namespace chaos {
class string {
public:
string(const char* str) : _str(new char[strlen(str) + 1]) {
strcpy(_str, str);
}
// 拷贝构造函数
string(const string& s) : _str(new char[strlen(s._str) + 1]) {
strcpy(_str, s._str);
}
~string() {
delete[] _str;
_str = nullptr;
}
private:
char* _str;
};
void test_string1() {
string s1("hello world");
string s2(s1); // 深拷贝
}
}
int main() {
chaos::test_string1();
return 0;
}
```
在上面的示例中,我们创建了一个名为`string`的类,它包含一个字符指针`_str`来存储字符串。在构造函数中,我们使用`new`运算符为`_str`分配了一块新的内存,并将传入的字符串复制到这块内存中。在拷贝构造函数中,我们同样为`_str`分配了一块新的内存,并将原始对象的字符串复制到新的内存中。这样,当我们创建`s2`对象时,它拥有一个独立的字符串副本,对`s1`的修改不会影响到`s2`。