Namespaces
Variants

std::strstreambuf:: ~strstreambuf

From cppreference.net
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