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() の呼び出し後、動的ストリームは自動的に凍結状態になります。 freeze ( false ) の呼び出しは、この ostrstream オブジェクトが作成されたスコープを抜ける前に必要です。そうしないと、デストラクタがメモリリークを引き起こします。また、凍結されたストリームへの追加出力は、割り当てられたバッファの終端に達すると切り詰められる可能性があります。

パラメータ

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 の公開メンバ関数)