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() 호출 후에는 동적 스트림이 자동으로 고정됩니다. 이 ostrstream 객체가 생성된 범위를 벗어나기 전에 freeze ( false ) 호출이 필요하며, 그렇지 않으면 소멸자에서 메모리 누수가 발생합니다. 또한 고정된 스트림에 추가 출력이 발생하면 할당된 버퍼의 끝에 도달한 시점에서 출력이 잘릴 수 있습니다.

매개변수

flag - desired status

반환값

(없음)

예제

#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 의 public member function)