boost::shared_ptr,CTOR 中有一个原子增量,但 DTOR 中有两个原子递减



我正在逐步完成源代码以进行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完成后完成,而不是之前。

最新更新