gpt4 book ai didi

c++ - 使用 boost::asio 异步发送自动变量。是否可以?

转载 作者:行者123 更新时间:2023-11-28 02:43:35 25 4
gpt4 key购买 nike

我仍在努力理解 boost::asio C++ 库的工作。

根据我之前question的回答, async_write() 方法将消息放入网络堆栈中并立即返回。然而,在 documentation他们说这样做是错误的:

void dont_do_this()
{
std::string msg = "Hello, world!";
boost::asio::async_write(socket, boost::asio::buffer(msg), my_handler);
}

他们坚持认为我们需要确保操作的缓冲区在调用完成处理程序之前有效。问题是为什么?在 async_write 返回的那一刻,我们已经将我们的消息放入网络堆栈中,我们不再需要缓冲区,自动变量 msg 可以被销毁而不会造成严重后果。我哪里错了?

最佳答案

async_write 并不真正将消息放入网络堆栈中。相反,它将写入排队以提升 io_service 持有的异步任务队列。写入网络堆栈实际上发生在稍后,当您在 io_service 上调用 run 时。简而言之,有一个中间队列。

在你的情况下,boost::asio::buffer 保留对“msg”的引用而不是它的拷贝。如果 msg 超出范围,当您的消息被发送到网络堆栈时,buffer 将指向对字符串的悬空引用。

关于c++ - 使用 boost::asio 异步发送自动变量。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25113640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com