当使用 std::string
对象并且我想向它添加字符时,它会预先分配一些内存,还是只分配我需要的内存?
准确地说:
std::string s;
s.reserve(20);
char c = 'a';
s = "";
for(int i = 0; i < 25; i++)
s += c;
在上面的例子中,我预留了一定量的内存。现在当我清除字符串时,是否会导致保留的内存被丢弃? 在循环中它会填满预留内存然后每次重新分配额外的 5 个字符吗?
最佳答案
没有要求 std::string
在您分配一个空字符串给它时释放分配的内存。当您为其分配一个短字符串时也不会。唯一的要求是,当它分配内存以容纳更大的字符串时,分配必须以实现摊销常数时间的方式进行。一个简单的实现是每次需要更多空间时增长 2 倍。
如果希望字符串的容量最小化,可以在 C++11 中使用 string::shrink_to_fit()
。在 C++11 之前,有些人在需要减少容量时诉诸“交换技巧”。
关于c++ - std::string 什么时候重新分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25974085/