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指针并在需要编辑编辑字符串时进行实际的内存分配?
是否会在字符串类中通过new/malloc进行分配?
这取决于.该string对象必须提供一些内存来存储数据,因为这是它的工作.某些实现使用"小字符串优化",其中对象包含一个小缓冲区,并且只有在字符串太大的情况下才从堆中分配.
为什么只能在内部传递内部const char指针
std::string并在需要编辑编辑字符串时进行实际的内存分配?
您描述的内容不一定是优化(因为每当您修改字符串时都需要额外的运行时检查),并且在任何情况下迭代器失效规则都不允许这样做.
有一个建议string_view,允许您访问具有接口的现有字符序列const string,而无需任何内存管理.它还不是标准的,并且不允许您修改字符串.
| 归档时间: |
|
| 查看次数: |
584 次 |
| 最近记录: |