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