shared_from_this()

image

让对象内部存个 weak_ptr ,跟着外部 shared_ptr “蹭” 控制块,调用 shared_from_this() 时,用这个 weak_ptr 生成 shared_ptr ,共享引用计数。

  1. 内部藏个 weak_ptr
    继承 enable_shared_from_this 的类,会自带一个 weak_ptr(比如叫 weak_this_ ),专门盯着外部 shared_ptr 的 “小本本”(控制块)。

  2. shared_ptr 初始化时 “绑定”
    当用 shared_ptr(比如 make_shared )管理对象时,会偷偷给 weak_this_ 赋值,让它和 shared_ptr 共享同一个控制块(记引用计数的地方)。

  3. shared_from_this() 干了啥
    调用它时,weak_this_ 会生成一个新 shared_ptr ,用的还是之前绑定的控制块,引用计数 +1 。要是没绑定过(对象没被 shared_ptr 管),就报错!

直接 shared_ptr(this) 会搞出新控制块(重复计数、对象提前析构),而 shared_from_this()weak_ptr 共享控制块,避免计数分裂

用内部 weak_ptr 蹭外部 shared_ptr 的控制块,安全生成共享计数的 shared_ptr ,解决对象内部返回自身智能指针的难题

posted @ 2025-07-04 19:35  丘狸尾  阅读(15)  评论(0)    收藏  举报