声明
std::string cpp{};
时是否会调用 new/malloc
?
假设我们已经有一个
const char* c
。是否可以将内容从 c
移动到 cpp
而无需额外分配?
声明
时是否会调用std::string cpp{};
/new
?malloc
这取决于特定的实现,但可能不是。
假设我们已经有一个
。是否可以将内容从const char* c
移动到c
而无需额外分配?cpp
移动,永远不要。 它只能从另一个 std::string
对象
移动。
对于
const char*
,它总是将字符复制到自己的内存中。
该副本是否会分配动态内存取决于两个因素:
std::string
是否实现SSO(短字符串优化)。现在大多数供应商都这样做。
const char *
的内容是否完全适合SSO缓冲区。
如果两个条件都为真,则不会动态分配内存。否则,就被分配。