【问题标题】:Do I need to delete my buffer after sending it into boost::asio::buffer?将缓冲区发送到 boost::asio::buffer 后是否需要删除它?
【发布时间】: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 功能后需要如何清理?

【问题讨论】:

    标签: c++ boost char buffer


    【解决方案1】:

    如果我理解您始终是缓冲区“buf”的所有权。使用同步操作,如 ::write,您可以在 ::write 完成后立即删除缓冲区。对于异步操作,如 ::async_write,您需要提供一个异步完成令牌(回调),该令牌将在操作完成时调用。您可以删除此回调中的 buf。

    【讨论】:

    • 好答案++,但是第一句话看起来不完整,你能改写成你的意思吗?
    【解决方案2】:

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

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

    您当然应该在完成后对提供给构造函数 (buf) 的缓冲区执行任何必要的清理。

    【讨论】:

    • buffer() 函数创建了一个 mutable_buffer 对象,它在内部只是一个指向原始缓冲区的指针。所以不会复制内存,也不会占用所有权。
    • @Timo - 这在阻塞调用的上下文中是有意义的,谢谢。
    猜你喜欢
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多