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
离开作用域时释放该对象的智能指针。 -
在下列两者之一发生时用关联的删除器释放对象:
-
通过调用 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所管理,则它被限定在创建指针的作用域中。