boost::asio::streambuf b;
...
void handler(const boost::system::error_code& e, std::size_t size)
{
if (!e)
{
std::stringstream sstr(std::string((std::istreambuf_iterator<char>(&b)),
std::istreambuf_iterator<char>()));
b.consume(size);
...
}
}
...
boost::asio::async_read_until(s, b, "END\r\n", handler);
当。。。的时候consume
方法被调用时,占用的内存为streambuf b
没有被释放。记忆将增长为async_read_until
被调用多次。我的用法正确吗?有什么办法可以释放之前的内存吗the get pointer
流缓冲区?
asio::streambuf 基于 std::vector ,它根据需要增长,但从不收缩。
因此,consume() 不应该释放内存,它只是调整内部指针:
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));
}
但是每次你再次consume()和read()时,内部缓冲区(向量)都会被重用,所以你不需要释放任何东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)