Spec-Zone.ru › C++

std::strstreambuf::freeze

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

Если буфер использует динамическое выделение памяти, устанавливает для потока признак заморозки в значение 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)
(деструктор)
[виртуальный]
уничтожает объект strstreambuf, при необходимости освобождая массив символов
(виртуальная открытая функция-член)
overflow
[виртуальный]
добавляет символ в выходную последовательность; может перераспределить память или изначально выделить память для буфера, если он динамический и не заморожен
(виртуальная защищённая функция-член)

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

Spec-Zone.ru

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