我目前正在尋找最流行的智能PTR實現,如提升共享和弱指針以及loki Smart and Strong pointer,因爲我想實現我自己的,並從我的理解Loki強指針看起來對我不安全,但我寧願認爲我理解它錯了,所以我想討論它是否安全。爲什麼我認爲這是不是安全的原因是,據我可以告訴它不能治療弱指針(這是一個StrongPtr,其中false表示其弱)有足夠的護理:C++:Loki StrongPtr對我來說看起來不安全,是這樣嗎?
例如在解引用功能:
PointerType operator ->()
{
KP::OnDereference(GetPointer()); //this only asserts by default as far as i know
//could be invalidated right here
return GetPointer();
}
在多線程環境中,弱指針隨時可能失效,因此該函數可能會返回一個無效的Ptr。
據我的理解,你要麼必須創建一個你要解除引用的ptr的strongPtr實例,以確保它不會在半途中失效。我認爲這也是boost不允許你在不創建shared_ptr實例的情況下解引用weak_ptr的原因。 Lokis StrongPtr構造函數遭受同樣的問題,我認爲。
這是一個問題,還是我閱讀src錯誤?
看起來確實不安全,特別是因爲沒有創建強指針,對象可能會在您返回之前刪除,而且在用戶使用它時也會被刪除(ouch)。也許多線程很難的好例子! – 2011-05-03 09:51:43
那麼,你指出,它不是**線**安全。我不知道它是否承諾過線程安全(它看起來不像你展示的代碼片段)。 (_unrelated:你的問題標題完全是修辭和自我傾向_) – sehe 2011-05-03 09:55:00
我認爲你有點太多的課。沒有鎖定,你無法保證沒有任何邪惡的事情發生在你不擁有的東西上。不管你希望在操作符中加入更好的檢查 - >使得實際的解引用完全安全,它可能在您取消引用指針並仍在成員函數調用之後仍然被銷燬。就是這樣。 – Damon 2011-05-03 09:57:45