如果新大小小于或等于旧大小,标准是否保证 std::string::resize 不会重新分配内存?

roc*_*eet 6 c++ string resize

我需要经常将字符串设为空,然后在其中附加一些字符。std::string::clear() 可能会重新分配 std::string::resize(0) 会重新分配吗?标准的话没有对此做出任何保证。

Nir*_*man 5

我认为最好的答案是http://en.cppreference.com/w/cpp/string/basic_string/clear 上的“注释”部分。

与 std::vector::clear 不同,C++ 标准没有明确要求此函数不改变容量,但现有实现不会改变容量。

如果容量不变,那几乎肯定意味着不会调用任何分配或释放函数。这可能是你能做的最好的事情,除了查看你关心的每一个实现。