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.
Führen Sie diesen Code aus
#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) | |
| deaktiviert/aktiviert automatische Neuzuweisung (public member function of std::ostrstream) | |
| [virtuell] |
destruiert ein strstreambuf-Objekt und gibt optional das Zeichenarray frei(virtual public member function) |
| [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) |