簡體   English   中英

與 shared_ptr 相比,unique_ptr 有什么優勢

[英]What is the advantage of a unique_ptr over a shared_ptr

我目前正在學習 C++ 中的unique_ptrshared_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是非引用計數指針。 它可以在沒有引用計數器的情況下逃脫,因為它不可復制。 這意味着它基本上是對newdelete指針的零成本抽象。

因此,如果您從不需要共享所有權,或者您可以將其從一個地方移動到另一個地方,並且您想要自我管理,那么您需要一個unique_ptr 這涵蓋了絕大多數指針用例。 當您真正需要共享所有權時,您可以提前 go 並使用shared_ptr ,但要了解您會因共享所有權而遭受性能損失。

暫無
暫無

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

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