std::strstreambuf::~strstreambuf
Von cppreference.com
< cpp | io | strstreambuf
| virtual ~strstreambuf(); |
(veraltet in C++98) (entfernt in C++26) |
|
Zerstört ein std::strstreambuf-Objekt. Wenn das Objekt einen dynamisch zugewiesenen Puffer verwaltet (der Pufferzustand ist "allocated") und das Objekt nicht "eingefroren" ist, wird der Puffer mithilfe der beim Konstruktor bereitgestellten Dekonstruktionsfunktion oder mit delete[] deallokiert, falls keine bereitgestellt wurde.
[edit] Parameter
(keine)
[edit] Anmerkungen
Dieser Destruktor wird typischerweise vom Destruktor von std::strstream aufgerufen.
Wenn str() für einen dynamischen strstream aufgerufen wurde und danach nicht freeze(false) aufgerufen wurde, führt dieser Destruktor zu einem Speicherleck.
[edit] Beispiel
Führen Sie diesen Code aus
#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); } // destructor called here, buffer deallocated { std::strstreambuf buf(my_alloc, my_free); std::ostream s(&buf); s << 1.23 << std::ends; std::cout << buf.str() << '\n'; // buf.freeze(false); } // destructor called here, memory leak! }
Ausgabe
my_alloc(4096) called 1.23 my_free() called my_alloc(4096) called 1.23