You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大括号初始化shared_ptr致Asio TCP连接异常关闭问题

问题分析与解决

问题根源

你遇到的问题是C++初始化语法的歧义导致的:

  • 使用大括号初始化auto conversation_ptr{shared_from_this()};时,clang++3.4会将其推导为std::initializer_list<std::shared_ptr<Conversation>>类型,而非预期的std::shared_ptr<Conversation>。
  • 异步操作的完成处理器捕获的是这个初始化列表,而非持有Conversation实例的智能指针,无法延长Conversation的生命周期,导致实例提前销毁,Asio异步操作因对象已析构触发“Operation aborted”错误。

解决方案

改用小括号进行直接初始化:

auto conversation_ptr(shared_from_this());

这种写法会明确推导为std::shared_ptr<Conversation>类型,异步回调捕获该智能指针后,会维持Conversation实例的生命周期直到异步操作完成,避免提前销毁的问题。

补充说明

在C11及早期标准中,大括号初始化的类型推导规则存在边缘情况,clang3.4作为较老的编译器,优先将此类语法推导为std::initializer_list。后续C标准(如C17)对auto大括号初始化的推导规则做了调整,但在你使用的旧环境下,必须注意这种语法差异。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:09:56