boost::asio::streambuf b;
...
void handler(const boost::system::error_code& e, std::size_t size)
{
if (!e)
{
std::stringstream sstr(std::string((std::ist
asio::streambuf is based on std::vector that grows as needed, but never shrinks. So, consume() is not supposed to release memory, it just adjusts internal pointers:
void consume(std::size_t n)
{
if (egptr() < pptr())
setg(&buffer_[0], gptr(), pptr());
if (gptr() + n > pptr())
n = pptr() - gptr();
gbump(static_cast<int>(n));
}
But each time you consume() and read() again, the internal buffer (vector) is reused, so you don't need to release anything.