C++:char指针指向std :: string转换复制内容吗?

Sub*_*way 14 c++ string constructor stdstring

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

char *ps = "Hello";
std::string str(ps);
Run Code Online (Sandbox Code Playgroud)

我知道std容器在被要求存储时往往会复制值.是复制整个字符串还是仅指针?如果事后我str = "Bye"会改变ps指向"再见"吗?

Vio*_*ffe 27

std::stringobject将分配内部缓冲区并将复制ps那里指向的字符串.对该字符串的更改不会反映到ps缓冲区,反之亦然.它被称为"深层复制".如果仅复制指针本身而不复制存储器内容,则将其称为"浅拷贝".

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

  • @PhilippLudwig 标准(N4140,§21.4-2)说*`basic_string`的成员函数使用作为模板参数传递的`Allocator`类的对象来为所包含的类字符对象分配和释放存储空间。* (2认同)

par*_*ydr 5

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