std::strstreambuf:: ~strstreambuf
| I/O manipulators | ||||
| Print functions (C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(C++20)
|
||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
| Synchronized Output | ||||
|
(C++20)
|
||||
| Types | ||||
| Error category interface | ||||
|
(C++11)
|
||||
|
(C++11)
|
| Public member functions | ||||
|
strstreambuf::~strstreambuf
|
||||
| Protected member functions | ||||
|
virtual
~strstreambuf
(
)
;
|
(veraltet in C++98)
(entfernt in C++26) |
|
Zerstört ein
std::strstreambuf
Objekt. Wenn das Objekt einen dynamisch allokierten Puffer verwaltet (der Pufferstatus ist "allokiert") und wenn das Objekt nicht eingefroren ist, dann gibt es den Puffer mittels der bei der Konstruktion bereitgestellten Freigabefunktion frei oder verwendet
delete
[
]
falls keine bereitgestellt wurde.
Parameter
(keine)
Hinweise
Dieser Destruktor wird typischerweise vom Destruktor von std::strstream aufgerufen.
Wenn
str()
auf einem dynamischen
strstream
aufgerufen wurde und
freeze(false)
danach nicht aufgerufen wurde, verursacht dieser Destruktor einen Speicherverlust.
Beispiel
#include <iostream> #include <strstream> void* my_alloc(size_t n) { std::cout << "my_alloc(" << n << ") called\n"; return new char[n]; } void my_free(void* p) { std::cout << "my_free() called\n"; delete[] (char*)p; } int main() { { std::strstreambuf buf(my_alloc, my_free); std::ostream s(&buf); s << 1.23 << std::ends; std::cout << buf.str() << '\n'; buf.freeze(false); } // Destruktor wird hier aufgerufen, Puffer freigegeben { std::strstreambuf buf(my_alloc, my_free); std::ostream s(&buf); s << 1.23 << std::ends; std::cout << buf.str() << '\n'; // buf.freeze(false); } // Destruktor wird hier aufgerufen, Speicherleck! }
Ausgabe:
my_alloc(4096) called 1.23 my_free() called my_alloc(4096) called 1.23