Spec-Zone.ru › C++

std::strstreambuf::freeze

void freeze( bool freezefl = true );

Если буфер использует динамическое выделение памяти, устанавливает статус замороженности потока в freezefl.

Пока поток заморожен, overflow() не будет перевыделять буфер, а destructor не будет освобождать буфер (что может привести к утечке памяти).

Параметры

freezefl - новое значение для статуса замороженности

Возвращаемое значение

(ничего)

Примечания

Каждый вызов str() замораживает поток, чтобы сохранить валидность указателя, который он возвращает. Чтобы разрешить деструктору освободить буфер, freeze(false) необходимо вызвать явно.

Пример

В этом примере начальное выделение базового массива составляло 16 байт.

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

Вывод:

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'

См. также

freeze
отключает/включает автоматическое перевыделение
(публичный член-функция std::strstream)
freeze
отключает/включает автоматическое перевыделение
(публичный член-функция std::ostrstream)
(деструктор)
[virtual]
уничтожает объект strstreambuf, при необходимости освобождая массив символов
(виртуальная публичная член-функция)
overflow
[virtual]
добавляет символ в выходной поток, может перевыделить или первоначально выделить буфер, если динамический и не заморожен
(виртуальная защищенная член-функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/strstreambuf/freeze

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API