我正在逐步完成源代码以进行boost::shared_ptr
,并且在构造时,参考计数器调用原子增量一次。然而,在破坏时,我看到原子递减被称为两次,与弱参考有关?
但是,这如何工作?一次在建设上增加,在破坏上两次减少,一次在release()
,一次在weak_release()
shared_ptr必须维护两个引用计数。一个用于共享实例,一个用于可能通过weak_ptr引用。有了这个,weak_ptr能够增加shared_ptr中的弱引用计数并保持shared_ptr活动状态(即使在解除分配分配的对象之后),以确定从weak_ptr到shared_ptr的有效转换。
您正在构造shared_ptr
而不考虑任何弱引用,因为在构造过程中不可能shared_ptr
弱引用这样的东西。但是在销毁时,应该减少 2 个计数器,主计数器和弱引用计数器。显然,在创建shared_ptr
对象后,任何人都可以为其创建weak_ptr
,但这只能在shared_ptr
ctor
完成后完成,而不是之前。