2010-12-06 97 views

回答

4

如果我明白你总是缓冲区'BUF'的所有权。通过同步操作:: :: write,只要:: write完成,就可以删除缓冲区。使用异步操作:: async_write,您需要提供一个异步完成标记(回调函数),该操作完成后将被调用。你可以在这个回调中删除buf。

2

即使您想要,您也没有指向可以删除的缓冲区的指针。

来自buf的输入数据用于构建Boost.Asio buffer,然后在该构造中使用的存储器由该库管理。写入调用会阻塞,直到写入所有数据,所以我想数据不会在内部复制(但我不确定)。

当你完成这个任务后,你当然应该对你给构造函数(buf)的缓冲区执行任何所需的清理。

+0

`buffer()`函数创建一个`mutable_buffer`对象,它在内部只是一个指向原始缓冲区的指针。所以没有内存被复制,并且不占用所有权。 – Timo 2010-12-06 19:37:27

+0

@Timo - 在阻塞调用的情况下有意义,谢谢。 – 2010-12-06 19:43:14