std::strstreambuf:: freeze
From cppreference.net
<
cpp
|
io
|
strstreambuf
|
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]
|
出力シーケンスに文字を追加し、動的かつ凍結されていない場合、バッファの再割り当てまたは初期割り当てを行う
(仮想保護メンバ関数) |