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

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

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

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

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

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

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