Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::strstreambuf::freeze(3)  C++ Standard Libary std::strstreambuf::freeze(3)

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

Synopsis
	  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).

Parameters
	  freezefl - new value to set the freeze status	to

Return value
	  (none)

Notes
	  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.

Example
	  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 allo-
       cated 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	behav-
       ior
		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 allo-
       cated 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,
	}

Output:
	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'

See also
	  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  deallocat-
       ing the character
	  [virtual]    array
		       (virtual	public member function)
	  overflow     appends a character to the output sequence, may reallo-
       cate or initially
	  [virtual]    allocate	the buffer if dynamic and not frozen
		       (virtual	protected member function)

http://cppreference.com		  2022.07.31	  std::strstreambuf::freeze(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::strstreambuf::freeze&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help