【问题标题】:How to store the buffer for boost::asio::write as a shared_ptr?如何将 boost::asio::write 的缓冲区存储为 shared_ptr?
【发布时间】:2017-06-12 11:12:52
【问题描述】:

http://www.boost.org/doc/libs/1_59_0/doc/html/boost_asio/reference/async_write/overload1.html 它为缓冲区声明“底层内存块的所有权由调用者保留,它必须保证它们在调用处理程序之前保持有效。”

为了做到这一点,我首先通过以下方式为缓冲区创建一个 shared_ptr:

request_buff_ = std::make_shared<boost::asio::const_buffer> (boost::asio::buffer(request_str));

其中 request_str 是一个 std::string。然后在写之前取消引用:

boost::asio::write(socket, *request_buff_);

得到如下编译错误:

'const_iterator': is not a member of 'boost::asio::const_buffer'

【问题讨论】:

    标签: c++ boost-asio


    【解决方案1】:

    缓冲区是一个简单的引用(指针+大小元组)。它可以按价值廉价复制。相反,使底层存储共享,例如

    auto s = std::make_shared<std::string>("payload");
    

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 2022-12-03
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多