深入学习c++--智能指针(三) unique_ptr
1. 幾種智能指針
1. auto_ptr: c++11中推薦不使用他(放棄)
2.?shared_ptr:?擁有共享對象所有權語義的智能指針?
3.?unique_ptr:?擁有獨有對象所有權語義的智能指針?
4.?weaked_ptr:?到?std::shared_ptr?所管理對象的弱引用?
1.1 unique_ptr
參考:https://zh.cppreference.com/w/cpp/memory/unique_ptr
-
std::unique_ptr?是通過指針占有并管理另一對象,并在?unique_ptr?離開作用域時釋放該對象的智能指針
-
在下列兩者之一發生時用關聯的刪除器釋放對象:
-
銷毀了管理的?unique_ptr?對象
-
通過?operator=?或?reset()?賦值另一指針給管理的?unique_ptr?對象。
-
-
通過調用?get_deleter()(ptr)?,用潛在為用戶提供的刪除器釋放對象。默認刪除器用?delete?運算符,它銷毀對象并解分配內存。
-
unique_ptr?亦可以不占有對象,該情況下稱它為空 (empty)。
-
std::unique_ptr?有兩個版本:
-
管理個對象(例如以?new?分配)
-
管理動態分配的對象數組(例如以?new[]?分配)
-
-
類滿足可移動構造?(MoveConstructible) 和可移動賦值?(MoveAssignable) 的要求,但不滿足可復制構造?(CopyConstructible) 或可復制賦值?(CopyAssignable) 的要求。
1.2 注意
-
只有非 const 的?unique_ptr?能轉移被管理對象的所有權給另一?unique_ptr?。若對象的生存期為?const?std::unique_ptr所管理,則它被限定在創建指針的作用域中。
-
?std::unique_ptr?常用于管理對象的生存期,包含:
-
通過正常退出和經由異常退出兩者上的?受保證刪除,提供異常安全,給處理擁有動態生存期的對象的類和函數
-
傳遞獨占的擁有動態生存期的對象的所有權到函數
-
從函數獲得獨占的擁有動態生存期對象的所有權
-
1.3 使用方式
- unique_ptr: 在某一個特定時刻,只有一個unique_ptr管理資源
- 拷貝構造函數和 "=" 對于unique_ptr不存在
-
// UniqueObjectPtr(const UniqueObjectPtr&) = delete
// UniqueObjectPtr(UniqueObjectPtr&&) = default
// 把 資源轉移給別人
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/douzujun/p/10803484.html
總結
以上是生活随笔為你收集整理的深入学习c++--智能指针(三) unique_ptr的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷P2055 [ZJOI2009]假期
- 下一篇: 小学经历——我家有猪