std :: string和const char*

Mar*_*rry 3 c++ string memory-management

如果我使用

const char * str = "Hello";
Run Code Online (Sandbox Code Playgroud)

运行时不需要内存分配/解除分配

如果我使用

const std::string str = "Hello";
Run Code Online (Sandbox Code Playgroud)

是否会在字符串类中通过new/malloc进行分配?我可以在集会中找到它,但我不擅长阅读它.

如果回答是"是的,会有malloc/new",为什么?为什么只能在std :: string里面传递给内部const char指针并在需要编辑编辑字符串时进行实际的内存分配?

Mik*_*our 5

是否会在字符串类中通过new/malloc进行分配?

这取决于.该string对象必须提供一些内存来存储数据,因为这是它的工作.某些实现使用"小字符串优化",其中对象包含一个小缓冲区,并且只有在字符串太大的情况下才从堆中分配.

为什么只能在内部传递内部const char指针std::string并在需要编辑编辑字符串时进行实际的内存分配?

您描述的内容不一定是优化(因为每当您修改字符串时都需要额外的运行时检查),并且在任何情况下迭代器失效规则都不允许这样做.

有一个建议string_view,允许您访问具有接口的现有字符序列const string,而无需任何内存管理.它还不是标准的,并且不允许您修改字符串.