C++总复习6--C++程序设计--智能指针
1.auto_ptr
2.unique_ptr
3.shared_ptr
4.weak_ptr
5.scoped_ptr
new
delete
容易出现内存泄漏
解决方法:自主的内存回收机制
人为开辟
系统释放
int* p = new int;
所有权交给栈上的一个变量
栈 系统开辟 系统释放
堆 人为开辟 人为释放
对象的生成
- 开辟内存
- 调用构造函数
对象的销毁
- 调用析构函数
- 释放内存
交给有名称的对象管理,对象生存周期到了,栈由系统销毁,
实现了系统调用析构函数,释放堆内存
C++98
auto_ptr
1. 所有权唯一:旧智能指针所有权赋给新智能指针,旧智能指针的所有权被取消
2.可能导致智能指针提前失效
#include <memory>
int mian()
{
std::auto ptr<int> apl(new int);//
return 0;
}
C++11 boost库
1.scope_ptr( unique_ptr)
所有权唯一
禁止拷贝,移动赋值等操作转移权限
不能实现共享
2.shared_ptr (强智能指针)
允许多个智能指针对象指向同一堆内存
共享
引用计数:
记录该堆内存有多少个对象指向
多一个对象指向 +1
少一个对象指向 -1
最多一个对象销毁 释放该对内存
问题:智能指针的相互引用问题,会导致内存泄漏
3.weak_ptr ( 弱智能指针)
解决强智能指针相互引用的问题
(1)不能单独使用 必须结合shared_ptr使用
(2)不处理引用计数