std::来自 const char* 的字符串,零分配

问题描述 投票:0回答:1

声明

std::string cpp{};
时是否会调用
new/malloc

假设我们已经有一个

const char* c
。是否可以将内容从
c
移动到
cpp
而无需额外分配?

c++ allocation stdstring
1个回答
0
投票

声明

std::string cpp{};
时是否会调用
new
/
malloc

这取决于特定的实现,但可能不是。

假设我们已经有一个

const char* c
。是否可以将内容从
c
移动到
cpp
而无需额外分配?

移动,永远不要。 它只能从另一个 std::string 对象

移动

对于

const char*
,它总是将字符复制到自己的内存中。

该副本是否会分配动态内存取决于两个因素:

  • std::string
    是否实现SSO(短字符串优化)。现在大多数供应商都这样做。

  • const char *
    的内容是否完全适合SSO缓冲区。

如果两个条件都为真,则不会动态分配内存。否则,就被分配。

© www.soinside.com 2019 - 2024. All rights reserved.