2016-01-13 81 views
3

我们的许多开发人员不明白从weak_ptr创建shared_ptr与锁定事物有什么关系。通过他们,术语'锁'首先与互斥体相关联。名称`weak_ptr :: lock()`的原因是什么?

它可能被称为例如usesafeguardleasepromote ......但是,嘿,这不是,这是我们的责任,学习的标准。

但是对于他们来说,这是一个非常糟糕的问题,以至于复制这个习惯用法的另一个类必须重新命名,导致许多代码行跟随重命名。现在我们牺牲了与标准的一致性,只是有点直觉。

有谁知道如何选择名称lock()的选择?

+3

真的很难提出一个有用的通用*和*有用的特定术语。 “使用”一词根本没有提供任何信息。你可能称之为“do_something”。 – molbdnilo

+0

我完全不相信这个问题是关于SO的话题。关闭的原因之一是“主要基于意见” - 这是。这也是一个关于“为什么人们在boost :: weak_ptr第一次被开发时做出这个选择的问题?”从那时起,答案就是“向后兼容”。 –

+1

@Martin - 同意这不是一个完美的问题,但是这里有人可能已经“在那里”,并且实际上知道答案。 –

回答

3

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

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

+0

然后像'保护','pin'甚至'lock_in'这样的词会更直观,不是吗? – xtofl

+0

也许吧。你应该参与15年前的提升评估,以改变这个问题(或者最近,对TR1?12年前的发展做出了贡献)。现在都太迟了。 –

+3

@xtofl在调用lock()之前,指针对象的存在是未知的。在锁定的呼叫之后,它是已知的(并且是固定的)。它存在或不存在。我猜想另一个名字可能是'open_shroedingers_cat_box()':-) –