使用构造函数将char*
转换为std::string
时:
char *ps = "Hello";
std::string str(ps);
我知道std容器在被要求存储它们时会倾向于复制值。
是复制整个字符串还是仅指针?
如果之后我做str = "Bye"
会改变ps指向“再见”吗?
答案 0 :(得分:26)
std::string
对象将分配内部缓冲区,并将复制ps
指向的字符串。对该字符串的更改不会反映到ps
缓冲区,反之亦然。它被称为“深层复制”。如果仅复制指针本身而不是内存内容,则称为“浅拷贝”。
重申:std::string
在这种情况下执行深层复制。
答案 1 :(得分:5)
str
将包含ps
的副本,更改str
不会更改ps
。