何時在C 中使用不同類型的指標
在C 中,各種指標類型可用於管理物件所有權和生命週期。本文提供了針對不同場景選擇適當的指針類型的指導,包括共享所有權、唯一所有權和非所有權。
共享所有權:
- std::shared_ptr:當多個物件需要共享資源的所有權,並且不清楚哪個物件將是時使用最後使用它的。
-
std::weak_ptr:用於觀察資源而不影響其生命週期。避免使用它來破壞shared_ptrs之間的引用循環。
唯一所有權:
-
std::unique_ptr:預設值在單一物件擁有資源的情況下選擇智慧型指針。它允許透過刪除器模板參數自訂物件刪除。
-
boost::intrusive_ptr:當資源已經提供引用計數管理時的輕量級選項。
沒有所有權:
-
原始指標(T*):用於對已知比引用物件壽命更長的資源的非擁有引用,或用於可空性和可重置性。
-
引用:首選非空、非擁有的引用
附加說明:
-
std::auto_ptr:在C 11中已棄用;替換為 std::unique_ptr。
-
Boost::shared_array 和boost::scoped_array:std::unique_ptr<:vector>> 的替代品; :unique_ptr 分別。
- 對於同時執行場景,應謹慎使用expired(),以避免檢查資源活躍度時的競爭條件:
if(!wptr.expired()) {
// Potential race condition
something_assuming_the_resource_is_still_alive();
}
以上是我應該使用哪種 C 指標類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!