Does std::string::clear reclaim the memory associated with a string?

c++, stl

Solution

Calling `std::string::clear()` merely sets the size to zero. The `capacity()` won't change (nor will `reserve()`ing less memory than currently reserved change the capacity). If you want to reclaim the memory allocated for a string, you'll need to do something along the lines of

std::string(str).swap(str);

Copying the string `str` will generally only reserve a reasonable amount of memory and swapping it with `str`'s representation will install the resulting representation into `str`. Obviously, if you want the string to be empty you could use

std::string().swap(str);

Problem

For example, if loaded a text file into an std::string, did what I needed to do with it, then called clear() on it, would this release the memory that held the text? Or would I be better off just declaring it as a pointer, calling new when I need it, and deleting it when I'm done?

Original source