Namensräume
Varianten
Aktionen

std::strstreambuf::freeze

Von cppreference.com
< cpp‎ | io‎ | strstreambuf
 
 
 
 
void freeze( bool freezefl = true );
(veraltet in C++98)
(entfernt in C++26)

Wenn der Puffer dynamische Speicherzuweisung verwendet, wird der Gefrierstatus des Streams auf freezefl gesetzt.

Solange der Stream gefroren ist, wird overflow() den Puffer nicht neu zuweisen, und der destructor wird den Puffer nicht freigeben (wodurch ein Speicherleck verursacht wird).

Inhalt

[bearbeiten] Parameter

freezefl - neuer Wert, auf den der Gefrierstatus gesetzt werden soll

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Hinweise

Jeder Aufruf von str() friert den Stream ein, um die Gültigkeit des von ihm zurückgegebenen Zeigers zu erhalten. Damit der Destruktor den Puffer freigeben kann, muss freeze(false) explizit aufgerufen werden.

[bearbeiten] Beispiel

In diesem Beispiel war die anfängliche Zuweisung des zugrunde liegenden Arrays für 16 Bytes.

#include <iostream>
#include <strstream>
 
int main()
{
    {
        std::strstream dyn; // dynamically-allocated read/write buffer
        dyn << "Test: " << 1.23; // note: no std::ends to demonstrate append behavior
        std::cout << "dynamic buffer holds " << dyn.pcount() << " characters: '";
        std::cout.write(dyn.str(), dyn.pcount()) << "'\n";
        // the buffer is now frozen, further output will not make the buffer grow
        dyn << "more output, hopefully enough to run out of the allocated space"
            << std::ends;
        std::cout << "After more output, it holds "
                  << dyn.pcount() << " characters: '" << dyn.str() << "'\n";
        dyn.freeze(false); // unfreeze before destructor
    } // memory freed by the destructor
 
    {
        char arr[20];
        std::ostrstream st(arr, sizeof arr); // fixed-size buffer
        st << 1.23; // note: no std::ends to demonstrate append behavior
        std::cout << "static buffer holds "
                  << st.pcount() << " characters: '";
        std::cout.write(st.str(), st.pcount());
        std::cout << "'\n";
        st << "more output, hopefully enough to run out of the allocated space"
           << std::ends;
        std::cout << "static buffer holds "
                  << st.pcount() << " characters: '";
        std::cout.write(st.str(), st.pcount());
        std::cout << "'\n";
    } // nothing to deallocate, no need to unfreeze,
}

Ausgabe

dynamic buffer holds 10 characters: 'Test: 1.23'
After more output, it holds 16 characters: 'Test: 1.23more o'
static buffer holds 4 characters: '1.23'
static buffer holds 20 characters: '1.23more output, hop'

[bearbeiten] Siehe auch

deaktiviert/aktiviert automatische Neuzuweisung
(public member function of std::strstream) [bearbeiten]
deaktiviert/aktiviert automatische Neuzuweisung
(public member function of std::ostrstream) [bearbeiten]
[virtuell]
destruiert ein strstreambuf-Objekt und gibt optional das Zeichenarray frei
(virtual public member function) [bearbeiten]
[virtuell]
hängt ein Zeichen an die Ausgabesequenz an, kann den Puffer neu allokieren oder initial allokieren, falls er dynamisch und nicht eingefroren ist
(virtual protected member function) [bearbeiten]