Question

I have a streamstring in two loops and it is burning my RAM. So how to clear properly the buffer of a steamstring? It is like that to simplify :

stringstream ss (stringstream::in | stringstream::out);

for()
{
    for()
    {
        val = 2;
        ss << 2;
        mystring = ss.str();
        // my stuff
    }
    // Clear the buffer here
}

It wrote 2 then 22 then 222... I tried .clear() or .flush() but it is not that. So how I do this?

Was it helpful?

Solution

The obvious solution is to use a new stringstream each time, e.g.:

for (...) {
    std::stringstream ss;
    for (...) {
        //  ...
    }
}

This is the way stringstream was designed to be used. (Also: do you really want a stringstream, or just an ostringstream?)

OTHER TIPS

Set ss.str(""); when you want to clear out the excess characters (Edit: thank you).

Use .clear() if your stream has set any error flags in the process of the prior conversion.

If you use C++0x:

ss.swap(stringstream());

Visual Studio 2010 (SP1) supports it.

If you don't use C++0x:

ss.seekp(0);
ss.seekg(0);
ss.str("");
ss.clear();

It won't clear the memory, but you could use your stringstream object as it would be empty before.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top