必须继承 std::enable_shared_from_this 且用 std::make_shared 构造,否则 shared_from_this() 抛 std::bad_weak_ptr;需公有继承并匹配模板参数,构造函数内不可调用,推荐 weak_from_this() 防异常。
必须继承 std::enable_shared_from_this,否则调用 shared_from_this() 会抛出 std::bad_weak_ptr 异常。

因为 std::shared_from_this() 依赖内部的 std::weak_ptr 成员(由 std::enable_shared_from_this 提供),这个弱指针只在对象被 std::make_shared 构造时自动绑定。手动用 new 配合 std::shared_ptr 构造器,不会触发该绑定逻辑。
auto p = std::shared_ptr(new MyClass()); p->shared_from_this(); // 抛出 std::bad_weak_ptr
auto p = std::make_shared(); p->shared_from_this(); // OK
std::make_shared 能在分配内存时一并初始化 enable_shared_from_this 内部的 weak_ptr
必须是公开继承,且模板参数必须与当前类一致;否则编译失败或行为未定义。
class MyClass : public std::enable_shared_from_this{ ... };
class MyClass : private std::enable_shared_from_this
class MyClass : public std::enable_shared_from_this
shared_from_this() 要求对象**必须已由 shared_ptr 管理**,否则异常;weak_from_this()(C++17 起)更安全,即使尚未被管理也返回空 std::weak_ptr。
shared_from_this() —— 此时对象还没被任何 shared_ptr 持有,必崩init() 或回调中,确保对象已在 shared_ptr 生命周期内auto wp = weak_from_this(); if (auto sp = wp.lock()) { /* 安全使用 sp */ }最容易被忽略的是构造时机和继承语法的一致性——少一个 public 或错一个模板参数,编译可能通过但运行时崩溃;而一旦忘了用 make_shared,问题会延迟到首次调用 shared_from_this() 才暴露。