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'
См. также
| отключает/включает автоматическое перераспределение памяти (открытая функция-член std::strstream) |
|
| отключает/включает автоматическое перераспределение памяти (открытая функция-член std::ostrstream) |
|
|
[виртуальный] | уничтожает объект strstreambuf, при необходимости освобождая массив символов (виртуальная открытая функция-член) |
|
[виртуальный] | добавляет символ в выходную последовательность; может перераспределить память или изначально выделить память для буфера, если он динамический и не заморожен (виртуальная защищённая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/strstreambuf/freeze