[英]What's the advantage of `std::optional` over `std::shared_ptr` and `std::unique_ptr`?
[英]What is the advantage of a unique_ptr over a shared_ptr
我目前正在學習 C++ 中的unique_ptr
和shared_ptr
類型。 智能指針相對於原始指針的優勢是顯而易見的,並且有很多解釋為什么你應該更喜歡它們而不是原始指針。 我很難理解的是為什么你會特別選擇使用unique_ptr
而不是shared_ptr
?
據我所知,從程序員的角度來看(忽略實現) , unique_ptr
看起來就像shared_ptr
的特例版本,其中引用計數限制為 one 。 因此,如果我創建了一個shared_ptr
並且只創建了一個引用,那么我基本上就擁有了unique_ptr
的實用程序(將來能夠使用shared
部分)。
那么unique_ptr
給你帶來什么好處呢? 我應該承認,我作為 Java 程序員來處理這個問題,而shared_ptr
似乎非常接近 Java 的工作方式。
unique_ptr
看起來就像shared_ptr
的特例版本,其中引用計數被限制為一個
這不是真的,這也是你為什么要使用一個或另一個的症結所在。 shared_ptr
是一個引用計數指針。 為了使其成為線程安全的,它使用原子計數器作為引用計數。 因此,這意味着對於shared_ptr
,您有存儲引用計數器的額外開銷,以及在影響它的所有函數中檢查/操作該計數器的執行開銷。 這種開銷會對性能產生顯着影響
相反, unique_ptr
是非引用計數指針。 它可以在沒有引用計數器的情況下逃脫,因為它不可復制。 這意味着它基本上是對new
和delete
指針的零成本抽象。
因此,如果您從不需要共享所有權,或者您可以將其從一個地方移動到另一個地方,並且您想要自我管理,那么您需要一個unique_ptr
。 這涵蓋了絕大多數指針用例。 當您真正需要共享所有權時,您可以提前 go 並使用shared_ptr
,但要了解您會因共享所有權而遭受性能損失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.