【发布时间】:2010-12-06 15:46:34
【问题描述】:
Sp 我有这样的功能:
void WriteToUrl(const unsigned char *buf, int size)
{
boost::asio::write(s, boost::asio::buffer(buf, size));
}
如果我不在其他地方使用缓冲区,是否需要删除它? y 功能后需要如何清理?
【问题讨论】:
Sp 我有这样的功能:
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 对象,它在内部只是一个指向原始缓冲区的指针。所以不会复制内存,也不会占用所有权。