我使用boost::asio::buffer发送消息。
void Send(const std::string& messageData)
{
socket.async_write(boost::asio::buffer(messageData), ...);
}
我在io_service的线程中遇到了“string iterator not dereferencable”的运行时错误。当我创建对象变量来存储缓冲区的消息数据时:
void Send(const std::string& messageData)
{
this->tempStorage = messageData;
socket.async_write(boost::asio::buffer(this->tempStorage), ...);
}
错误从未发生过。 std::string(messageData所引用的内容)在调用Send()后几乎立即被释放 - boost :: asio :: buffer是否仅存储对对象的引用? 如果是这样,我该如何强制它按值存储数据?
async_send
在 C++11 中可以稍微缩短一下,如果我说错了,请纠正:async_send(socket, boost::asio::buffer(*s), [s](error_code const&, size_t) {});
。现在不需要创建类成员函数onComplete
了。 - Tsar Ioannvoid send()
结束时,没有它 std::string 将会被销毁(以及所有在堆上分配的动态数据将被释放)。 - Slausunique_ptr
将其绑定到完成处理程序?应该有吧?与相对较慢的shared_ptr
相比,这将对性能产生积极影响。 - Kenji