智能指针
来源:互联网 发布:java递归算法40例 编辑:程序博客网 时间:2024/05/15 16:02
一个问题
int func(){ int * ptr = new int; ... return 0;}
问题:忘记了delete,导致堆溢出,怎么办?
答:别忘了delete就行。
然而让程序员”别忘了”总是不安全的。即使没有忘记delete,也会发生一些情况:
int func(){ int * ptr = new int; ... try { throw ...; } ... delete ptr; return 0;}
触发异常导致无法delete :O
解决方法:智能指针
智能指针实质为模板类,它可以接受一个指针参数,通常为:new …
有三种智能指针:
1. auto_ptr //被c++11摒弃
2. unique_ptr //c++11新增
3. shared_ptr //c++11新增正因为智能指针是一个类,而一个对象在其过期时会自动调用析构函数
那么, 因为析构函数的存在,所以智能指针则可以不用考虑delete。改进后的代码:
int func(){ auto_ptr<int> ptr(new int); ... if(...) { throw ...; } ... return 0;}
如果一切正常,return后对象过期,自动调用析构函数
即使触发异常,栈解退时对象过期,同样会调用智能指针的析构函数,
0 0
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- Java加载.class文件的几种方式
- 无限滑动的ViewPager
- JAVA语法细节(1)
- Python读写文件
- 【图像处理】数字图像处理软件(一)
- 智能指针
- Effective C++条款05解读: 了解C++默默编写并调用哪些函数
- LeetCode---(119)Pascal's Triangle II
- LeetCode 129 Sum Root to Leaf Numbers
- Mac配置Python开发环境并实现简单的字符串和整数拼接
- android源码之工厂设计模式
- Redhat/CentOS系统KVM虚拟机安装过程详解
- 最近
- 脚印