asio :: streambuf основан на std :: vector, который растет по мере необходимости, но никогда не сжимается.Итак, потребление () не должно освобождать память, оно просто настраивает внутренние указатели:
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));
}
Но каждый раз, когда вы снова используете () и read (), внутренний буфер (вектор) используется повторно, поэтомувам не нужно ничего выпускать.