Namespaces
Variants

std::strstreambuf:: freeze

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