我剛開始使用boost::ptr_vector
。我有一個ptr_vector pctr
作爲一個類A的成員,並希望另一個類B引用pctr
中的元素。在構造類B的對象時,我想在pctr
中存儲一個指針。由於指針容器不允許訪問指針(但僅限於引用),因此我必須從pctr
中獲取引用的地址,然後將其存儲在類型爲B的對象中。但是,似乎引用了引用的地址直觀。有更好的選擇嗎?指向升壓指針容器中元素的指針
4
A
回答
0
我認爲採用解除引用迭代器的地址是實現你想要做的事情的正確方法。
iterator it = ...
T *ptr = &*it;
但是,這是危險的,因爲如果A對象在B對象之前被銷燬,那麼最終可能會出現懸掛指針。這就是爲什麼release
函數允許調用者獲取對象的地址,也可以從容器中移除指針。
如果您可以支持開銷,您可以考慮將boost::ptr_vector
更改爲智能指針向量,例如, std::vector<boost::shared_ptr<T> >
。
2
正如你發現的那樣,boost指針容器很好地保護了它們的指針。 當然,你可以通過獲取它將會產生的引用的地址來打敗它,但請注意,你可能正在通過掛在這些指針上來削弱指針容器對權威所有權的要求的強度(所有這些取決於你的其餘部分代碼真的)。
替代似乎是:
具有B級保持迭代器引用感興趣的指針容器元素(當然通常的迭代器失效規則必須要處理)。
由於A擁有指針,而您似乎希望B持有某種非擁有的弱引用,因此請使用容器
shared_ptr
來代替,並使B使用weak_ptr
。下行可能表現不佳。
相關問題
- 1. 指針約定與:指向某些元素的指針數組
- 2. 指向指針的指針和指向數組的指針
- 3. 指針指向指針
- 4. 指向C中的指針的指針
- 5. 指針指向列表中的指針
- 6. 智能指向容器的指針
- 7. C++強制指針指向指向基指向指針的指針
- 8. 指針的大小,指向C中指針的指針
- 9. 將指針指向指向指向int的指針的指針指向指向double的指針的指針是正確的嗎?
- 10. 指向Struct的指針的指針
- 11. 指向對象表示元素的指針或指向提供的存儲元素的指針?
- 12. void指針到升壓的矢量共享指針
- 13. 指針指向數組的指針
- 14. C++ - 指向數組的指針 - 指針
- 15. 什麼是指向指針的指針?
- 16. 指向結構指針的指針
- 17. 指向Char陣列指針的指針
- 18. C++指向指針的指針
- 19. 指向指針數組的指針是?
- 20. 指向C++指針的指針
- 21. 指向結構指針的指針
- 22. C++傳遞指向向量元素的指針而不是數組指針
- 23. 對象指針賦值指針向量的元素
- 24. 指向指針的指針和指向數組的指針之間的區別?
- 25. 指針和數組[指針int和指向char的指針]
- 26. 使用指針:指針指針指針
- 27. 指針指向結構指針錯誤
- 28. 無效指針指向對象指針
- 29. 通過指針指向指針
- 30. const指針指向一個const指針
其實有同樣的問題。將回到我以前的解決方案(帶有明確刪除的原始指針向量)。傻,真的。 – Cookie 2011-05-28 13:43:47
@Cookie實際上,直到現在(2011)我一直在使用指針容器。我使用了reference_wrapper。我已經在我正在從事的一個項目的wiki中解釋了這一點:http://sourceforge.net/apps/mediawiki/crackpot/index.php?title=Boost_Pointer_Containers – 2011-06-03 09:32:59
好的,謝謝。如果你發現自己有一些閒暇時間,三種選擇之間的性能比較可能會很好。 – Cookie 2011-06-06 10:06:19