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

调用shared_from_this触发bad_weak_ptr异常的原因咨询

问题原因及修复

你的代码调用construct()时抛出bad_weak_ptr异常,核心原因是**Foo类对std::enable_shared_from_this<Foo>采用了private继承**:

在C++中,用class定义类时默认继承权限为private。而std::enable_shared_from_this的工作逻辑依赖于:当第一个shared_ptr绑定到对象时,必须能访问到enable_shared_from_this内部的weak_ptr成员并完成初始化。private继承会阻断shared_ptr的这个初始化流程,导致后续调用shared_from_this()时,内部的weak_ptr处于未初始化的无效状态,最终触发异常。

修复方法

将继承权限改为public即可解决问题,同时修正构造函数的语法错误(原代码default()写法不符合C++标准):

class Foo : public std::enable_shared_from_this<Foo>
{
    Foo() = default;
public:
    [[nodiscard]] static auto getInstance()
    {
        static auto f = std::shared_ptr<Foo>(new Foo());
        return f;
    }

    stream construct()
    {
        return stream{ shared_from_this() };
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:24:14