voi*_*ter 8 c++ string std stdstring dynamic-memory-allocation
当我std::string使用默认构造函数创建一个时,是否在堆上分配了任何内存?我希望答案不依赖于实施,并且是标准化的.考虑以下:
std::string myString;
Run Code Online (Sandbox Code Playgroud)
不幸的是,根据N3290,答案是否定的.
表63第643页说:
data() 一个非空指针,可以复制,并且可以添加0size() 0capacity() 一个未指定的值该表与C++ 03完全相同.
不,但是,我不知道默认情况下会在堆上分配内存的任何实现。然而,相当多的包括所谓的短字符串优化 (SSO),它们在其中分配一些空间作为字符串对象本身的一部分,因此只要您不需要超过该长度(似乎在 10和 20 个字符作为规则)它可以完全避免进行单独的堆分配。
但这也不是标准化的。