有哪些 C 智慧指標實作以及它們如何比較?
在 C 中,智慧型指標是包裝類,它管理動態分配物件的生命週期,在不再需要時提供自動記憶體釋放。智慧指針有多種實作方式,每種都有自己的優點和缺點。
C 03 實作
-
std::auto_ptr: 有限的垃圾收集工具,擁有指向的對象,但不能在指向STL 容器中複製或使用。它在 C 標準中已被棄用。
-
std::auto_ptr_ref: 與 std::auto_ptr 一起使用的設計細節,以允許在特定情況下進行複製和賦值。
C 11實作
-
std::unique_ptr: 替換std::auto_ptr,對陣列處理、左值保護和STL 相容性進行了重大改進。它授予指針的獨佔所有權。
-
std::shared_ptr: 將引用計數智慧指標包裝在動態分配的物件周圍,從而允許共享所有權。它支援線程安全並處理不完整類型。
-
std::weak_ptr: 對帶有 std::shared_ptr 的物件的非擁有參考。它不會阻止物件刪除,但可以檢索 std::shared_ptr(如果仍然有效)。它用於避免循環引用計數。
Boost 實作
-
boost::shared_ptr:一個引用-計數智慧指針由於其廣泛使用多功能性。
-
boost::weak_ptr: 對 boost::shared_ptr 的非擁有引用,類似於其 C 11 對應項。
-
boost:: scoped_ptr: 一個沒有複製語意的輕量級智慧指針,相當於std::unique_ptr.
- boost::intiveive_ptr: 設計用於建立具有自訂引用計數和執行緒安全性的自訂智慧指標相容類別。
-
boost:: shared_array: 陣列的boost::shared_ptr,提供陣列操作功能,如operator[]和delete[].
- <:: scoped_array:> 用於陣列的boost::scoped_ptr,具有內建陣列功能,但不可複製。
Qt 實作
-
QPointer: QObject 及其衍生類別的「弱」智慧指針,在存取之前檢查物件有效性,但在多執行緒環境中存在限制。
-
QSharedDataPointer: 一個「強」智慧指針,需要引用計數實現,但不是atomic.
- QExplicitlySharedDataer:
- QExplicitlySharedDataer:
QSharedPointer:- 原子引用- 具有線程安全、自訂刪除和相容性的計數智慧指標boost::shared_ptr.
QWeakPointer:-
QWeakPointer:
QScopedPointer: 基於在 boost::scoped_ptr 上,提供單一擁有者智慧指標以實現異常安全和相容性。
以上是存在哪些 C 智慧指標實現,它們有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!