Namespaces
Variants

std::strstreambuf:: freeze

From cppreference.net
void freeze ( bool freezefl = true ) ;
(veraltet in C++98)
(entfernt in C++26)

Wenn der Puffer dynamische Allokation verwendet, setzt er den eingefrorenen Status des Streams auf freezefl .

Während der Stream eingefroren ist, overflow() wird den Puffer nicht neu zuweisen und der destructor wird den Puffer nicht freigeben (was zu einem Speicherleck führt).

Inhaltsverzeichnis

Parameter

freezefl - neuer Wert für den Einfrierstatus

Rückgabewert

(keine)

Hinweise

Jeder Aufruf von str() friert den Stream ein, um die Gültigkeit des zurückgegebenen Zeigers zu erhalten. Um dem Destruktor zu ermöglichen, den Puffer freizugeben, freeze ( false ) muss explizit aufgerufen werden.

Beispiel

In diesem Beispiel betrug die anfängliche Zuweisung des zugrundeliegenden Arrays 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'

Siehe auch

deaktiviert/aktiviert automatische Neuzuweisung
(öffentliche Elementfunktion von std::strstream )
deaktiviert/aktiviert automatische Neuzuweisung
(öffentliche Elementfunktion von std::ostrstream )
[virtual]
zerstört ein strstreambuf Objekt, optional mit Freigabe des Zeichenarrays
(virtuelle öffentliche Elementfunktion)
[virtual]
fügt ein Zeichen zur Ausgabesequenz hinzu, kann bei dynamischen und nicht eingefrorenen Puffern Neuzuweisung oder Erstzuweisung durchführen
(virtuelle geschützte Elementfunktion)