15

当我将 a 转换char*std::string使用构造函数时:

char *ps = "Hello";
std::string str(ps);

我知道 std 容器在被要求存储值时往往会复制值。是复制整个字符串还是仅复制指针?如果之后我这样做str = "Bye"会改变 ps 指向“Bye”吗?

4

2 回答 2

32

std::string对象将分配内部缓冲区并复制那里指向的字符串ps。对该字符串的更改不会反映到ps缓冲区,反之亦然。它被称为“深拷贝”。如果只复制指针本身而不复制内存内容,则称为“浅拷贝”。

重申:std::string在这种情况下执行深层复制。

于 2013-05-08T11:30:15.760 回答
5

str将包含副本ps,更改str不会更改ps

于 2013-05-08T11:30:21.600 回答