2016-01-13 76 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()':-) –