问题描述
- c++ string类型的变量赋值是浅拷贝还是深拷贝?
-
string str1 = "123453";
string str2 = str1;
str1和str2的内存地址是相同的吗?str2中某一字符值的改变会影响到str1吗?
解决方案
不同。string 有自己的构造函数来分配空间。
所以不会影响
解决方案二:
浅拷贝还是深拷贝这是对于指针来说的,基本变量是没有这一说的,都是直接分配一个新的内存给它。
所以不会有影响的
解决方案三:
string类是stl类,已经封装好了,当然是深度拷贝,直接用就可以,完全不用担心内存的问题,经过几十年的安全检验了
解决方案四:
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的值也改变了,这是什么原因呢?
时间: 2024-12-30 06:19:52