SP我有这样一个功能:发送到boost :: asio :: buffer后需要删除缓冲区吗?
void WriteToUrl(const unsigned char *buf, int size)
{
boost::asio::write(s, boost::asio::buffer(buf, size));
}
我是否需要删除缓冲区,如果我不使用任何它还有什么地方? y功能后如何清洁?
SP我有这样一个功能:发送到boost :: asio :: buffer后需要删除缓冲区吗?
void WriteToUrl(const unsigned char *buf, int size)
{
boost::asio::write(s, boost::asio::buffer(buf, size));
}
我是否需要删除缓冲区,如果我不使用任何它还有什么地方? y功能后如何清洁?
如果我明白你总是缓冲区'BUF'的所有权。通过同步操作:: :: write,只要:: write完成,就可以删除缓冲区。使用异步操作:: async_write,您需要提供一个异步完成标记(回调函数),该操作完成后将被调用。你可以在这个回调中删除buf。
即使您想要,您也没有指向可以删除的缓冲区的指针。
来自buf
的输入数据用于构建Boost.Asio buffer
,然后在该构造中使用的存储器由该库管理。写入调用会阻塞,直到写入所有数据,所以我想数据不会在内部复制(但我不确定)。
当你完成这个任务后,你当然应该对你给构造函数(buf
)的缓冲区执行任何所需的清理。
`buffer()`函数创建一个`mutable_buffer`对象,它在内部只是一个指向原始缓冲区的指针。所以没有内存被复制,并且不占用所有权。 – Timo 2010-12-06 19:37:27
@Timo - 在阻塞调用的情况下有意义,谢谢。 – 2010-12-06 19:43:14