`weak_ptr::lock()` 的命名原因是什么?

3
许多开发人员不理解从weak_ptr创建shared_ptr与锁定有什么关系。对他们来说,“锁定”一词首先与互斥量相关联。
它本可以被称为usesafeguardleasepromote等,但是它没有,我们有责任学习标准。
但对他们而言,这是一个非常严重的问题,以至于另一个复制了这个惯用语的类必须被重新命名,导致许多代码跟随重命名。现在,我们为了一点点直观性而牺牲了符合标准的一致性。
有人知道为什么选择使用lock()这个名称吗?

3
很难想出一个既通用又具体有用的术语。"use"这个词完全没有提供任何信息。说实在的,你还不如称之为"do_something"。 - molbdnilo
我完全不认为这个问题适合在SO上讨论。关闭的原因之一是“基于主观看法”,而这个问题正是如此。它也是一个关于“当boost::weak_ptr首次开发时,人们为什么做出了这个选择?”的问题。自那时以来,答案一直是“向后兼容性”。 - Martin Bonner supports Monica
1
@Martin - 我同意这不是一个完美的问题,但这里可能有人已经“走过那条路”,并且实际上亲身知道答案。 - Bo Persson
@MartinBonner,我现在的情况是,我无法向其他开发人员解释为什么他们应该通过函数名理解其含义。我会尝试重新表述问题。 - xtofl
1个回答

3

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

它与锁定互斥量等操作无关。


那么像“safeguard”、“pin”或者甚至是“lock_in”这样的词汇会更加直观,不是吗? - xtofl
也许吧。不过你应该在大约15年前参与Boost的审查,以改变这种情况(或者最迟在12年前为TR1的开发做出贡献)。现在已经太晚了。 - Martin Bonner supports Monica
3
在调用 lock() 函数之前,指针所指向的对象是否存在是未知的。调用 lock() 后,就会确定(并固定)它的存在性。它要么存在,要么不存在。我想另一个名字可以是open_shroedingers_cat_box() :-) - Richard Hodges
在你提出的所有名字中,我认为“pin”最能准确地表达意思 - 但我认为你不学习标准并使用它是非常愚蠢的。 - Martin Bonner supports Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接