深入学习c++--智能指针(三) unique_ptr

1. 几种智能指针

1. auto_ptr: c++11中推荐不使用他(放弃)

2. shared_ptr: 每添加一次引用 就+1,减少一次引用,就-1;做到指针进行共享

3. unique_ptr: 一个指针同时只能有一个使用者使用

4. weaked_ptr: 与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[] 分配)

1.2 注意

  • 只有非 const 的 unique_ptr 能转移被管理对象的所有权给另一 unique_ptr 。若对象的生存期为 const std::unique_ptr所管理,则它被限定在创建指针的作用域中。

猜你喜欢

转载自www.cnblogs.com/douzujun/p/10803484.html