C++ 构造函数和析构函数中抛出异常
一、构造函数
1、结论:
不会造成内存泄漏
2.为什么?
(1)new一个对象有两个过程:
A.向系统申请内存空间
B.在申请的内存空间上执行构造函数,初始化对象。
(2)内部对象构造先于对象本身。
(3)对象在构造函数抛出异常后,系统会负责清理构造对象时申请的内存,但不会调用对象析构函数。
也就是说构造对象的内存会被释放掉,已经完成实例化的成员对象也会成功析构。
二、析构函数
1、结论:
会造成内存泄漏
2、为什么?
1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。
2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。
三、总结
1、构造函数可以抛出异常。
2、c++标准指明析构函数不能、也不应该抛出异常。
欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » C++ 构造函数和析构函数中抛出异常
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » C++ 构造函数和析构函数中抛出异常