GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::strstreambuf::freeze(3) C++ Standard Libary std::strstreambuf::freeze(3)

std::strstreambuf::freeze - std::strstreambuf::freeze


void freeze( bool freezefl = true );


If the buffer uses dynamic allocation, sets the frozen status of the stream to
freezefl.


While the stream is frozen, overflow() will not reallocate the buffer and the
destructor will not deallocate the buffer (thereby causing a memory leak).


freezefl - new value to set the freeze status to


(none)


Every call to str() freezes the stream to preserve the validity of the pointer it
returns. To allow the destructor to deallocate the buffer, freeze(false) needs to be
called explicitly.


In this example, initial allocation of the underlying array was for 16 bytes

// Run this code


#include <strstream>
#include <iostream>


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'


freeze disables/enables automatic reallocation
(public member function of std::strstream)
freeze disables/enables automatic reallocation
(public member function of std::ostrstream)
destructor destructs a strstreambuf object, optionally deallocating the character
[virtual] array
(virtual public member function)
overflow appends a character to the output sequence, may reallocate or initially
[virtual] allocate the buffer if dynamic and not frozen
(virtual protected member function)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.