Namespaces
Variants

std::strstreambuf:: freeze

From cppreference.net
void freeze ( bool freezefl = true ) ;
(obsolète en C++98)
(supprimé en C++26)

Si le tampon utilise l'allocation dynamique, définit le statut gelé du flux à freezefl .

Tant que le flux est gelé, overflow() ne réallouera pas le tampon et le destructor ne libérera pas le tampon (causant ainsi une fuite de mémoire).

Table des matières

Paramètres

freezefl - nouvelle valeur à définir pour l'état de gel

Valeur de retour

(aucun)

Notes

Chaque appel à str() gèle le flux pour préserver la validité du pointeur qu'il retourne. Pour permettre au destructeur de désallouer le tampon, freeze ( false ) doit être appelé explicitement.

Exemple

Dans cet exemple, l'allocation initiale du tableau sous-jacent était de 16 octets.

#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,
}

Sortie :

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'

Voir aussi

désactive/active la réallocation automatique
(fonction membre publique de std::strstream )
désactive/active la réallocation automatique
(fonction membre publique de std::ostrstream )
[virtual]
détruit un objet strstreambuf , en désallouant optionnellement le tableau de caractères
(fonction membre publique virtuelle)
[virtual]
ajoute un caractère à la séquence de sortie, peut réallouer ou allouer initialement le tampon si dynamique et non gelé
(fonction membre protégée virtuelle)