shared_from_this()

让对象内部存个 weak_ptr ,跟着外部 shared_ptr “蹭” 控制块,调用 shared_from_this() 时,用这个 weak_ptr 生成 shared_ptr ,共享引用计数。
-
内部藏个
weak_ptr
继承enable_shared_from_this的类,会自带一个weak_ptr(比如叫weak_this_),专门盯着外部shared_ptr的 “小本本”(控制块)。 -
shared_ptr初始化时 “绑定”
当用shared_ptr(比如make_shared)管理对象时,会偷偷给weak_this_赋值,让它和shared_ptr共享同一个控制块(记引用计数的地方)。 -
shared_from_this()干了啥
调用它时,weak_this_会生成一个新shared_ptr,用的还是之前绑定的控制块,引用计数 +1 。要是没绑定过(对象没被shared_ptr管),就报错!
直接 shared_ptr(this) 会搞出新控制块(重复计数、对象提前析构),而 shared_from_this() 靠 weak_ptr 共享控制块,避免计数分裂
用内部 weak_ptr 蹭外部 shared_ptr 的控制块,安全生成共享计数的 shared_ptr ,解决对象内部返回自身智能指针的难题

浙公网安备 33010602011771号