gpt4 book ai didi

C++ boost::asio 如何在异步函数上正确使用 std::shared_ptr

转载 作者:行者123 更新时间:2023-11-30 03:46:38 25 4
gpt4 key购买 nike

这是我使用 boost::asio 的第一个项目,我正在构建一个异步服务器。

我需要使用 shared_ptr 来控制对 session 控制指针的访问。这是我定义 session 并将其传递给 boost 异步函数的方法:

// Define the new session object
std::shared_ptr<SocketSession> session = std::make_shared<SocketSession>(ioService);

// Configure the acceptor
acceptor.async_accept(session->getSessionSocket(),
boost::bind(&SocketServer::HandleAccept,
this,
session,
boost::asio::placeholders::error));

和处理程序签名:

void SocketServer::HandleAccept(std::shared_ptr<SocketSession> session,
const boost::system::error_code& errorCode)

代码编译正常,完全没有错误。但是在运行代码时,调用了 HandleAccept 方法并出现错误:Operation canceled,甚至没有监听套接字。

看来这与我使用 shr​​ared_ptr 的方式有关。我浏览了一些示例,boost 使用了 shared_from_this。我无法找出为什么这是必要的,以及为什么我的 shared_ptr 在运行时失败。

感谢帮助。

注意:此代码在服务器类 (Server) 上运行,而不是在 session 类 (SocketSession) 上运行。在我看来,这导致不使用 shared_from_this 因为 SocketSession 是在另一个对象上创建的....

最佳答案

@Mendez 当人们遇到这种“ASIO 模式”的要求时,我有几个介绍性示例。

你可以看看它们,因为我确实解释了模式以及引入它的原因:

关于C++ boost::asio 如何在异步函数上正确使用 std::shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34023255/

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