【问题标题】:What is the reason for the name `weak_ptr::lock()`?名称为“weak_ptr::lock()”的原因是什么?
【发布时间】:2016-01-13 06:23:40
【问题描述】:

我们的许多开发人员不明白从weak_ptr 创建shared_ptr 与锁定事物有什么关系。在他们看来,“锁”一词首先与互斥锁相关联。

例如,它可能被称为 usesafeguardleasepromote...但是,事实并非如此,学习标准是我们的责任。

但是对他们来说,这是一个非常糟糕的问题,以至于不得不重命名另一个复制这个习语的类,导致大量代码行跟随重命名。现在我们牺牲了与标准的一致性,只是为了一点点直观性。

有人知道lock()这个名字是怎么选择的吗?

【问题讨论】:

  • 很难想出一个既有用又通用又有用的术语。 “使用”一词根本没有提供任何信息。你不妨称它为“do_something”。
  • 我完全不相信这个问题是 SO 的主题。关闭的原因之一是“主要基于意见”——就是这样。还有一个问题是“为什么人们在 boost::weak_ptr 最初开发时会做出这个选择?”从那时起,答案一直是“向后兼容”。
  • @Martin - 同意这不是一个完美的问题,但这里有些人可能已经“去过那里”并且实际上知道第一手的答案。
  • @MartinBonner 我的情况是我无法向其他开发人员解释为什么他们应该通过它的名称理解这个函数的含义。我会尝试改写这个问题。

标签: c++ shared-ptr terminology naming weak-ptr


【解决方案1】:

它将共享对象锁定在内存中,并防止它被删除。

它与锁定互斥锁或类似的东西无关。

【讨论】:

  • 那么像“safeguard”、“pin”甚至“lock_in”这样的词会更直观,不是吗?
  • 也许吧。您应该在大约 15 年前参与提升审查以改变这一点(或者最迟,在 12 年前为 TR1 的开发做出了贡献)。现在一切都太晚了。
  • @xtofl 在调用lock() 之前,指针对象的存在是未知的。在调用锁定之后,它是已知的(并且已修复)。它要么存在,要么不存在。我想另一个名字可能是open_shroedingers_cat_box() :-)
  • 在您建议的所有名称中,我认为“pin”最能表达含义 - 但我认为您非常愚蠢,不刚刚学习并使用标准。
猜你喜欢
  • 1970-01-01
  • 2019-12-24
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多