c++构造和析构能不能抛异常的问题!
2016-07-15 16:45
169 查看
总结:
1、析构函数中不允许抛异常。
2、构造函数中可以抛异常(但不建议)。构造函数中尽量不要抛异常或调用可能会抛异常的代码,如果必须要抛异常,要考虑处理内存泄漏。
之所以不建议抛异常是因为考虑到内存泄漏,因为构造函数抛异常会导致析构不能被调用;假如,设计者的设计思路是构造申请动态内存,析构释放动态内存。当构造函数中成功申请了内存,但在申请内存的下一段代码抛异常,这时析构不被调用也就不能释放内存,从而导致了内存泄漏。
非要抛异常的解决办法(针对上述例子):当申请动态内存(用P指代)成功后的下一段代码抛异常的时候释放主动释放该段内存(p)。
1、析构函数中不允许抛异常。
2、构造函数中可以抛异常(但不建议)。构造函数中尽量不要抛异常或调用可能会抛异常的代码,如果必须要抛异常,要考虑处理内存泄漏。
之所以不建议抛异常是因为考虑到内存泄漏,因为构造函数抛异常会导致析构不能被调用;假如,设计者的设计思路是构造申请动态内存,析构释放动态内存。当构造函数中成功申请了内存,但在申请内存的下一段代码抛异常,这时析构不被调用也就不能释放内存,从而导致了内存泄漏。
非要抛异常的解决办法(针对上述例子):当申请动态内存(用P指代)成功后的下一段代码抛异常的时候释放主动释放该段内存(p)。
相关文章推荐
- 树(1)把二叉查找树转换成有序的双向链表
- c语言--内部名外部名
- July 15th 模拟赛C T1 游泳池 Solution
- leetcode_c++:链表:Merge Two Sorted Lists(021)
- C++11带来的优雅语法
- C++ 共享内存 函数封装
- 关于C++中的虚拟继承的一些总结
- 了解C++资源库提高C++开发效率
- C++ PP Chapter Ⅴ 循环 and Chapter Ⅵ 分支
- leetcode344题 题解 翻译 C语言版 Python版
- Refactor: replace type code with class (c++)
- handle句柄
- C语言中的static 详细分析
- c++ : new 在特定指针处构造初始化
- cpp代码注释
- c++动态加载
- C/C++ 笔试、面试题目大汇总
- 常见排序算法C++总结
- 用程序解密爱因斯坦经典难题(C++)
- c++11新特性