std::strstreambuf:: freeze
|
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) |