C++ string 深拷贝
时间: 2023-09-30 15:11:48 浏览: 134
在 C++ 中,字符串可以使用 `std::string` 类型来表示。当我们将一个 `std::string` 对象赋值给另一个对象时,C++ 会执行默认的浅拷贝操作,这意味着两个对象将共享同一个内存地址,如果其中一个对象修改了字符串内容,另一个对象也会受到影响。
为了避免这种情况,我们需要使用深拷贝来复制字符串。深拷贝会创建一个新的内存空间来存储字符串,这样两个对象就不再共享同一个内存地址,互相之间也不会影响。
下面是一个使用深拷贝的示例代码:
```cpp
#include <iostream>
#include <string>
int main() {
std::string s1 = "Hello, world!"; // 定义一个字符串对象
std::string s2 = s1; // 浅拷贝,s2 和 s1 共享同一块内存
std::string s3 = s1; // 深拷贝,s3 和 s1 分别拥有自己的内存空间
s2[0] = 'h'; // 修改 s2 中的字符
std::cout << "s1: " << s1 << std::endl; // 输出 s1 的值
std::cout << "s2: " << s2 << std::endl; // 输出 s2 的值
std::cout << "s3: " << s3 << std::endl; // 输出 s3 的值
return 0;
}
```
输出结果为:
```
s1: Hello, world!
s2: hello, world!
s3: Hello, world!
```
从输出结果可以看出,s1 和 s3 的值没有改变,而 s2 的值发生了变化。这是因为 s2 和 s1 共享同一块内存,修改 s2 的同时也修改了 s1 的值。而 s3 通过深拷贝创建了一个新的内存空间,与 s1 完全独立,因此不受 s2 修改的影响。
阅读全文