![](/img/trans.png)
[英]How to reimplement iterator of a class that contains STL container of pointers in C++
[英]C++ iterator with weak pointers to container elements
我有一個通用的樹容器,我想實現一個迭代器來遍歷他的元素。 在主容器中,我使用了共享指針來連接樹的各個節點。
使用弱指針實現迭代器有意義嗎?
關鍵是:如果在使用迭代器時從樹中刪除節點,則僅當銷毀迭代器時(如果我使用共享指針),才會釋放節點資源。 使用弱指針,我認為資源會立即被釋放(可能使迭代器不一致,但這並不重要)。
您能想到其他解決方案嗎?
首先,迭代器僅包含指向容器元素的指針,而不包含元素本身。 因此,無論是否為weak_ptr
。
因此,如果您從容器中刪除元素,則迭代器可能變得無效 。 這意味着它可以指向垃圾內存,已釋放的內存,非您的內存,另一個元素(您認為不是)等等。
這是容易出錯的方式,並且會導致問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.