通常我會遵循Google風格指南,我覺得它與我看到的東西很好地吻合。我也幾乎完全使用boost :: scoped_ptr,這樣只有一個管理員擁有特定對象的所有權。然後我傳遞裸指針,這個想法是我的項目的結構使得所有對象的管理者在使用它們的對象被銷燬後總是被銷燬。對scoped_ptr的弱引用?
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Smart_Pointers
這是所有偉大的,但我只是一個討厭的小內存錯誤跺腳這裏的主人正巧在用它已刪除的對象之前被刪除咬傷。
現在,在大家上下跳躍之前,我是這種模式的傻瓜,爲什麼我不使用shared_ptr?等等,考慮一點,我不想擁有未定義的所有者語義。儘管shared_ptr會發現這種特殊情況,但它會向系統的用戶發送錯誤的消息。它說:「我不知道誰擁有這個,它可能是你!」
什麼可以幫助我會是一個弱指針的範圍指針。實際上,一個有弱引用列表的作用域指針,在作用域指針破壞時會被清除。這將允許單個所有權語義,但給予使用對象一個機會來解決我遇到的問題。
因此,在weak_ptr中,爲scoped_ptr和'next_weak_ptr'的額外'weak_refs'指針以及額外的指針開銷,這將使一個整潔的小單一所有者,多用戶結構。
它可能甚至可能只是一個調試功能,所以在'發佈'中,整個系統只會變回正常大小的scoped_ptr和弱參考的標準單指針。
所以.....畢竟這我的問題是:
- 是否有這樣的指針/彭定康已經在STL /升壓,我是 丟失,或者我應該推出自己的?
- 有沒有更好的辦法, 仍然符合我的單一所有權目標?
乾杯, 巴蒂爾
我不知道標準或庫實現。如果你確實實現了你所描述的內容,那麼最終會得到一個類似於boost shared_ptr/weak_ptr的實現,因爲你可能想要檢測到有人從weak_ptr中獲取了原始指針並將其緩存。話雖如此,您可能只想使用shared_ptr/weak_ptr並在您的「管理器」中聲明其所保存的shared_ptr在您想銷燬該對象時是唯一的。 –