如何将boost :: asio :: write的缓冲区存储为shared_ptr?

时间:2017-06-12 11:12:52

标签: c++ boost-asio

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'

1 个答案:

答案 0 :(得分:4)

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

_search?preference=_primary