文章目录

  • 1 构造函数中抛出异常
  • 2 析构函数中的异常

1 构造函数中抛出异常

如果构造函数中抛出异常会发生什么情况?

构造函数中抛出异常:

  • 构造过程立即停止。
  • 当前对象无法生成。
  • 析构函数不会被调用。
  • 对象所占的空间立即收回。

工程中的建议:

  • 不要在构造函数中抛出异常。
  • 当构造函数可能产生异常时,使用二阶构造模式。

编程实验:构造函数中的异常

#include <iostream>
#include <string>using namespace std;class Test
{public:Test(){cout << "Test()" << endl;throw 0;}virtual ~Test(){cout << "~Test()" << endl;}
};int main(int argc, char *argv[])
{Test* p = reinterpret_cast<Test*>(1);try{p = new Test();}catch(...){cout << "Exception..." << endl;}cout << "p = " << p << endl;return 0;
}

Linux下可以使用如下工具判断是否有内存泄漏:
valgrind --tool=memcheck --leak-check=full ./a.out


2 析构函数中的异常

避免在析构函数中抛出异常!

析构函数的异常将导致:

  • 对象所使用的资源无法完全释放。
  • 可能导致terminate()多次被调用。

参考资料:

  1. C++深度解析教程

构造函数和析构函数中抛出异常相关推荐

  1. C++中构造函数和析构函数可以抛出异常吗?

    C++中构造函数和析构函数可以抛出异常吗? 一.  析构函数 参照<Effective C++>中条款08:别让异常逃离析构函数.  总结如下: 1. 不要在析构函数中抛出异常!虽然C++ ...

  2. effective c++:virtual函数在构造函数和析构函数中的注意事项

    effective c++:virtual函数在构造函数和析构函数中的注意事项 如不使用自动生成函数要明确拒绝 对于一个类,如果你没有声明,c++会自动生成一个构造函数,一个析构函数,一个copy构造 ...

  3. 构造函数 和 析构函数 能否抛出异常

    构造函数和析构函数分别管理对象的建立和释放,负责对象的诞生和死亡的过程.当一个对象诞生时,构造函数负责创建并初始化对象的内部环境,包括分配内存.创建内部对象和打开相关的外部资源,等等.而当对象死亡时, ...

  4. C++对象模型8——构造函数和析构函数中对虚函数的调用、全局对象构造和析构、局部static数组的内存分配

    一.构造函数和析构函数中对虚函数的调用 仍然以https://blog.csdn.net/Master_Cui/article/details/109957302中的代码为例 base3构造函数和析构 ...

  5. (c++)5.4构造函数和析构函数中调用虚函数

    在构造函数和析构函数中调用虚函数时,采用静态联编(他们所调用的虚函数是自己类中定义的函数) 如果在自己类中没有实现这个虚函数,则调用的是基类中的虚函数,绝不会是任何在派生类中重定义的虚函数 //构造函 ...

  6. C++核心准则C.82:不要在构造函数或析构函数中调用虚函数

    C.82: Don't call virtual functions in constructors and destructors C.82:不要在构造函数或析构函数中调用虚函数 Reason(原因 ...

  7. C++经验(四)-- 基类构造函数和析构函数中调用virtual虚函数?

    class Base {public:Base();virtual void oneFunction() = 0;... };Base::Base() {...oneFunction(); }clas ...

  8. C++中最好不要在构造函数和析构函数中调用虚函数!!!

    1.最好不要在基类和派生类的构造和析构函数中调用虚函数,不会出现多态性 实例如下: #include "iostream"using namespace std;class Bas ...

  9. C++学习笔记-----不要在构造函数和析构函数中调用虚函数

    考虑下面的程序: #include <iostream> using namespace std;class Base { public:Base() { cout << &q ...

最新文章

  1. Application Desktop Toolbars 桌面工具栏
  2. JAVA struts2
  3. 上班族吐槽大集合:那些发生在公司的傻X奇遇
  4. http://w3cschool.codecloud.net/python/python-object.html?ref=myread
  5. HAProxy杂记(1)
  6. 【Processing-日常1】小圆碰撞
  7. cx_Oracle模块
  8. 获取电脑系统当前时间
  9. RAID卡的安装配置
  10. admin ajax,如何在FastAdmin中使用Ajax发送请求?
  11. 暖通空调材料进场如何验收?
  12. 智华计算机加密,智华天成V1.0计算机终端保密检查系统软件 国密装备目录**
  13. openstack 分布式路由器dvr
  14. cogs2790. mk和tree解题报告
  15. matlab中复华simpson,MATLAB Simpson的规则
  16. 07_LTP语言技术平台
  17. 关于AD与KiCad绘制PCB的一点看法
  18. 名片互赞软件(安卓版)
  19. 研华webaccess与西门子PLC以太网通讯配置
  20. R语言使用报错及处理总结(不断更新)

热门文章

  1. 【控制】滑动模型控制(Sliding Mode Control)
  2. LaTex 插入数学公式
  3. 【PC工具】注意安全,建议使用:安全软件,谷歌输入法下载
  4. 【DA算法】基于DA算法的FIR滤波器的FPGA实现
  5. 数字锁相环的matlab仿真
  6. 升级 Visual Studio 2015 CTP 5 的坑、坑、坑
  7. Android动画(一)-视图动画与帧动画
  8. 在项目中配置Nexus Repository的信息
  9. Linxu用户登录监测
  10. 分不清的InputStream和OutputStream