創建shared_ptr時,它的管理器對象使用強引用計數器&。我明白,通過使用強引用計數器shared_ptr知道何時解除分配管理對象,但我不明白爲什麼它使用弱引用計數器。瞭解弱引用計數器
Q
瞭解弱引用計數器
4
A
回答
5
存在與shared_ptr<T>
& weak_ptr<T>
相關聯的兩個對象:
- 實際對象(
T
) - 控制塊,包含共享和弱計數器
實際的對象將被銷燬,如果共享計數器達到0
。但控制塊有活路,只要有共享或弱指針,即控制塊將盡快既共享和弱反是0
刪除。
1
weak_ptr
用於需要處理有問題的堆對象的事情,但不希望聲明任何會阻止釋放對象的所有權。這種東西的一個典型示例是觀察者,他們想知道底層對象的任何更改,但不希望在沒有其他人使用該對象時將其保留。
3
弱指針和強指針都包含指向數據的指針和指向引用計數塊的指針。
當您嘗試將弱指針轉換爲強指針時,會添加新的強計數。如果它從0增加,你知道數據已經被破壞,所以你失敗了。這需要訪問引用計數塊。
因此,引用計數塊的生命週期必須超過所有未完成的弱指針的生存期。
這可以通過引用計數引用計數塊的引用計數來確保。當引用計數減少到零時,最後一個未完成的強或弱引用超出範圍,導致智能指針銷燬引用計數塊。
相關問題
- 1. 瞭解弱與強引用
- 2. 理解弱引用
- 3. 瞭解弱地圖
- 4. 瞭解弱實體和弱關係
- 5. 瞭解無主VS弱IBoutlets
- 6. 瞭解弱比較功能
- 7. Luabridge弱引用LuaRef數據
- 8. Lua弱引用
- 9. 軟引用和弱引用
- 10. 弱引用和強引用
- 11. Common Lisp弱引用?
- 12. 強和弱引用
- 13. 塊內弱引用
- 14. FieldBinding和弱引用
- 15. 弱引用問題
- 16. 弱引用值的弱散列表?
- 17. 瞭解SHA-1碰撞弱點
- 18. xslt位置計數器瞭解
- 19. 瞭解Hadoop文件系統計數器
- 20. ObjC自動引用計數(ARC):弱分配vs unsafe_unretained代表?
- 21. 瞭解引用計數/內存和屬性
- 22. 瞭解python引用計數以調試c-extensions
- 23. 瞭解引用計數 - Windows安裝程序
- 24. ReCaptcha太弱了嗎?
- 25. 弱/強註解
- 26. Perl中的弱引用
- 27. 弱引用或指針
- 28. 安卓弱內參引用
- 29. python中的弱引用
- 30. Java 8 lambda弱引用
這是爲什麼這是必要的? – Tracer
@Tracer:爲什麼'weak_ptr'是必需的?或者爲什麼需要'weak_ptr'的計數器? – nosid
@Tracer假設它沒有像那樣工作。然後,'weak_ptr'如何知道指向的對象是否已被刪除? – hvd