2 xh931076284 xh931076284 于 2015.07.18 10:53 提问

c++ string类型的变量赋值是浅拷贝还是深拷贝?

string str1 = "123453";
string str2 = str1;
str1和str2的内存地址是相同的吗?str2中某一字符值的改变会影响到str1吗?

6个回答

Evankaka
Evankaka   Ds   Rxr 2015.07.18 11:05

浅拷贝还是深拷贝这是对于指针来说的,基本变量是没有这一说的,都是直接分配一个新的内存给它。
所以不会有影响的

oyljerry
oyljerry   Ds   Rxr 2015.07.18 14:20

string直接进行了深拷贝。值复制了。修改一个不会影响另一个。
不同编译器,不同版本stl也有实现区别,比如用copy on write。

91program
91program   Ds   Rxr 2015.07.18 10:58

不同。string 有自己的构造函数来分配空间。
所以不会影响

tabe123
tabe123   Rxr 2015.07.18 11:37

string类是stl类,已经封装好了,当然是深度拷贝,直接用就可以,完全不用担心内存的问题,经过几十年的安全检验了

CSDNXIAON
CSDNXIAON   2015.07.18 10:56

集合类型的赋值和拷贝
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

xh931076284
xh931076284   2015.07.20 21:16

但是我在Linux测过这样的代码:
string str1="123453";
string str2=str1;
虽然str1和str2的地址不一样,但是声明str2后,分配的内存大小没有变,这是什么缘故呢?
在这基础之上,在声明一个char*的变量
char ch=(char)str2.c_str();
*(ch+3)='f';
这样操作之后,str1的值也改变了,这是什么原因呢?

Csdn user default icon
上传中...
上传图片
插入图片