簡體   English   中英

為什么 Sutter 建議只在容器中存儲值和智能指針?

[英]Why Sutter suggests store only values and smart pointers in containers?

我正在閱讀 Herb Sutter 的C++ Coding Standards第 79 項:

在容器中存儲值對象:容器假定它們包含類似值的類型,包括值類型(直接保存)、智能指針和迭代器。

恐怕我不明白為什么。

問題1:當薩特說“包含”時,他的意思是“擁有”嗎? 像“容器假設它們擁有類似值的類型”?

問題2:除了值類型、智能指針和迭代器,還有哪些類型可以存儲? 例如,參考? 為什么不建議將參考存儲在容器中?

基本上,他是說不要將原始指針放入容器中,也不要使用從標准庫中刪除 C++17 的舊auto_ptr

關於你的問題:

問題1:當薩特說“包含”時,他的意思是“擁有”嗎? 像“容器假設它們擁有類似值的類型”?

實際值類型——比如int說——沒有所有者。 沒有人擁有 5 或 42。通過“類值”類型,他指的是不完全是值但具有明確定義的復制語義的類型,因此您可以將它們作為值傳遞。 例如std::shared_ptr就是這樣。 它不是一個值,但你可以像一個值一樣傳遞它。 Sutter 在這里沒有提到只移動類型,因為這本書早於它們在標准 C++ 中的存在。

問題2:除了值類型、智能指針和迭代器,還有哪些類型可以存儲? 例如,參考? 為什么不建議將參考存儲在容器中?

好吧,現在您可以將只移動類型存儲在容器中,例如 std::unique_ptr。 你只需要尊重他們的移動語義。

您不能將裸引用存儲在容器中。 STL 容器是通用編寫的,基本上在其中存儲引用不起作用,因為復制引用並不意味着容器實現所期望的含義,即雙重引用不是 C++ 的一部分。 如果要將引用存儲在 STL 容器中,可以使用std::reference_wrapper

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM