【问题标题】:boost::shared_ptr, one atomic increment in ctor but two atomic decrements in dtor?boost::shared_ptr,ctor 中的一个原子增量,但 dtor 中的两个原子减量?
【发布时间】:2015-05-02 13:07:31
【问题描述】:

我正在逐步浏览boost::shared_ptr 的源代码,并在构造时引用计数器调用一次原子增量。但是,在销毁时,我看到原子减量被调用了两次,连接到弱引用?

但是,这如何工作?构造增加一次,破坏减少两次,一次在release(),一次在weak_release()

【问题讨论】:

  • 您能否在帖子中包含相应的代码部分或包含链接?

标签: c++ c++11 boost shared-ptr


【解决方案1】:

一个 shared_ptr 必须维护两个引用计数。一个用于共享实例,一个用于可能通过weak_ptr 引用。有了这个,weak_ptr 能够增加 shared_ptr 中的弱引用计数并保持 shared_ptr 活动(即使在分配的对象被释放后)以确定从 weak_ptr 到 shared_ptr 的有效转换。

【讨论】:

  • 弱计数器不会初始化为零然后递减后为-1吗?
  • @mezamorphic 这将是一个实现细节。
【解决方案2】:

您正在构造shared_ptr,而不考虑任何弱引用,因为在shared_ptr构造期间可能没有弱引用之类的东西。但是在销毁 2 计数器应该减少主要的和弱引用的一个。很明显,在创建 shared_ptr 对象之后,任何人都可以为其创建 weak_ptr,但这只能在 shared_ptr ctor 完成之后完成,而不是之前。

【讨论】:

  • 弱计数器不会初始化为零,然后递减后为-1吗?
  • 这取决于实现,坦率地说,只要 -1 被视为特殊值,这并不重要。
猜你喜欢
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 2010-12-08
  • 2015-10-15
  • 1970-01-01
相关资源
最近更新 更多