From GCC 3.4 calling s.reserve(res)
on a
string s
with res < s.capacity()
will
reduce the string's capacity to std::max(s.size(), res)
.
This behaviour is suggested, but not required by the standard. Prior to GCC 3.4 the following alternative can be used instead
std::string(str.data(), str.size()).swap(str);
This is similar to the idiom for reducing
a vector
's memory usage
(see this FAQ
entry) but the regular copy constructor cannot be used
because libstdc++'s string
is Copy-On-Write.