Namespaces
Variants

std::ostrstream:: freeze

From cppreference.net

void freeze ( bool flag = true ) ;
(устарело в C++98)
(удалено в C++26)

Если поток использует динамически выделяемый массив для вывода, отключает ( flag == true ) или включает ( flag == false ) автоматическое выделение/освобождение буфера. Фактически вызывает rdbuf ( ) - > freeze ( flag ) .

Содержание

Примечания

После вызова str() динамические потоки автоматически замораживаются. Перед выходом из области видимости, в которой был создан этот объект ostrstream , требуется вызов freeze ( false ) , иначе деструктор приведет к утечке памяти. Кроме того, дополнительный вывод в замороженный поток может быть обрезан при достижении конца выделенного буфера.

Параметры

flag - желаемый статус

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

(нет)

Пример

#include <iostream>
#include <strstream>
int main()
{
    std::ostrstream dyn; // динамически выделенный выходной буфер
    dyn << "Test: " << 1.23; // примечание: нет std::ends для демонстрации добавления
    std::cout << "The output stream contains \"";
    std::cout.write(dyn.str(), dyn.pcount()) << "\"\n";
    // поток теперь заморожен из-за str()
    dyn << " More text"; // вывод в замороженный поток может быть обрезан
    std::cout << "The output stream contains \"";
    std::cout.write(dyn.str(), dyn.pcount()) << "\"\n";
    dyn.freeze(false); // freeze(false) должен быть вызван, иначе деструктор приведет к утечке
    std::ostrstream dyn2; // динамически выделенный выходной буфер
    dyn2 << "Test: " << 1.23; // примечание: нет std::ends
    std::cout << "The output stream contains \"";
    std::cout.write(dyn2.str(), dyn2.pcount()) << "\"\n";
    dyn2.freeze(false);   // разморозить поток после str()
    dyn2 << " More text" << std::ends; // вывод не будет обрезан (буфер растет)
    std::cout << "The output stream contains \"" << dyn2.str() << "\"\n";
    dyn2.freeze(false); // freeze(false) должен быть вызван, иначе деструктор приведет к утечке
}

Возможный вывод:

The output stream contains "Test: 1.23"
The output stream contains "Test: 1.23 More "
The output stream contains "Test: 1.23"
The output stream contains "Test: 1.23 More text"

Смотрите также

устанавливает/сбрасывает замороженное состояние буфера
(публичная функция-член std::strstreambuf )