[英]Performance of auto_ptr vs. shared_ptr
我沒有找到有關auto_ptr和shared_ptr的性能問題的信息(我使用tr1實現)。 由於shared_ptr比auto_ptr更為復雜,因此auto_ptr更快嗎? 因此,通常的問題聽起來像是說與shared_ptr相比,shared_ptr的性能如何?
PS:我知道現在unique_ptr比auto_ptr更可取,但並非所有編譯器都支持它,因此問題在於auto_ptr和shared_ptr
取消引用時,沒有性能差異。
如果使用make_shared分配了shared_ptr,則不會浪費任何堆分配。
復制指針(而不是對象)時,shared_ptr會慢一點,因為它需要增加其引用計數器。
但是,這些可能無關緊要,因此請堅持將shared_ptr與make_shared結合使用。
auto_ptr
是已棄用的C ++ 98構造。 因此,您不應該再在新編寫的C ++ 11代碼中使用它,而改為在編譯器/庫維護者unique_ptr
來實現對unique_ptr
支持,這可能會大大抵消它可能帶來的任何性能優勢。
話雖這么說,請使用語義上適合您的用例的語言,除非您已剖析 *_ptr
存在問題...
通常,唯一的好答案是測量 。
但是對於這種情況,您知道shared_ptr
,除非您使用make_shared
,否則它涉及計數器塊的動態分配,並且除非您有一個非常好的小對象分配器,否則創建它一定很慢(談論數量級)。指向對象的第一個共享指針。
但是隨后,也許借助Boost和標准庫,分配就得到了真正的優化。 也許,可能!,您可以使用make_shared
對對象及其控制塊僅使用1個分配。 所以... 衡量 。
順便提一下, auto_ptr
已棄用。
對於任何現代編譯器,請改用unique_ptr
。
與所有性能問題一樣:您需要在特定的設置中自行衡量。
但是,通常來說,您可以期望shared_ptr<>
開銷要比auto_ptr<>
開銷大,因為它必須在后台做更多的工作來確保封閉指針的正確共享行為。
另一方面,兩者之間並沒有真正的可比性: auto_ptr<>
僅支持一個副本(所有權在副本上轉移),而shared_ptr<>
支持多個副本。 因此,除非僅將上述指針用於一個復制指針,否則無法進行有意義的比較。 如果確實使用單拷貝指針,並且確定不需要更多副本,請使用專用的auto_ptr<>
。
無論如何,性能差異是否顯着取決於您的特定項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.