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

一.  析构函数

参照《Effective C++》中条款08:别让异常逃离析构函数。

   总结如下:

1. 不要在析构函数中抛出异常!虽然C++并不禁止析构函数抛出异常,但这样会导致程序过早结束或出现不明确的行为。

2. 如果某个操作可能会抛出异常,class应提供一个普通函数(而非析构函数),来执行该操作。目的是给客户一个处理错误的机会。

3. 如果析构函数中异常非抛不可,那就用try catch来将异常吞下,但这样方法并不好,我们提倡有错早些报出来。

二.  构造函数

总结如下:

1. 构造函数中抛出异常,会导致析构函数不能被调用,但对象本身已申请到的内存资源会被系统释放(已申请到资源的内部成员变量会被系统依次逆序调用其析构函数)。

2. 因为析构函数不能被调用,所以可能会造成内存泄露或系统资源未被释放。

3. 构造函数中可以抛出异常,但必须保证在构造函数抛出异常之前,把系统资源释放掉,防止内存泄露。(如何保证???使用auto_ptr???)

最后总结如下:

1. 构造函数中尽量不要抛出异常(可以),能避免的就避免,如果必须,要考虑不要内存泄露!

2. 不要在析构函数中抛出异常!

C++中构造函数和析构函数可以抛出异常吗?相关推荐

  1. php中的构造函数和析构函数,php 中构造函数和析构函数

    构造函数: 在对象实例化时被调用,一个类中只能有一个构造函数,在类中起初始化的作用. 析构函数: 在对象结束时被自动调用. 话不多说,用一段代码来说明两者的区别: //定义一个类 class Pers ...

  2. 类中构造函数、析构函数与赋值函数的重写

    类中构造函数.析构函数与赋值函数的重写 class String { public: String(const char *str = NULL); // 普通构造函数 String(const St ...

  3. C++中构造函数和析构函数

    [注]致力于将知识讲明白!不懂请留言! 构造函数 定义 它是一种特殊的方法.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中. 另外,一个类可以有 ...

  4. C# 中构造函数与析构函数(二)

    (二)析构函数 析构函数 · 不能在结构中定义析构函数.只能对类使用析构函数. · 一个类只能有一个析构函数. · 无法继承或重载析构函数. · 无法调用析构函数.它们是被自动调用的. · 析构函数既 ...

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

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

  6. C++中构造函数和析构函数的调用顺序

    情况一:类B继承类A 结论一:定义变量时:先调用父类的构造函数,再调用派生类的构造函数:变量销毁时:先调用派生类的析构函数,再调用父类的析构函数. #include <iostream> ...

  7. C++虚继承中构造函数和析构函数顺序问题以及原理

    多重继承的问题:多个类B,C,-继承同一个类A导致如果X继承了B,C,-那么在X中将还有多个A中成员的拷贝,如果想要访问A中的成员如果不加名字空间将会导致二义性,这种拷贝大多是没有实际意义的,为了避免 ...

  8. C++中构造函数和析构函数常见面试题?

    构造函数和析构函数常见面试题? 构造函数和析构函数常见面试题? 1.永远不要在构造函数或析构函数中调用虚函数 2.为什么构造函数不能定义为虚函数 3.为什么析构函数可以定义为虚函数 4.构造函数的执行 ...

  9. C++:39---继承中构造函数、析构函数的关系

    一.继承中构造函数的关系 如果父类没有构造函数,则子类初始化时不需要构造父类 如果父类有构造函数,则子类初始化自己的构造函数时,要先初始化父类的构造函数 基类的构造函数必须在派生类的构造函数初始化列表 ...

最新文章

  1. 同事埋了个坑:Insert into select语句把生产服务器炸了
  2. es6与java的相似度,特斯拉Model Y对比蔚来ES6!这次对比结果出乎意料
  3. redis报protocol error的真正原凶
  4. ASP.NET Core EFCore 之Code First
  5. 【C 语言】结构体 ( 指针运算与指针内存操作 | 结构体成员偏移量计算 )
  6. php脏在哪里,逍遥游户外联盟-人身上最“脏”的地方是哪里?3个地方,建议经常清洗 -...
  7. 架构师未来性的基础:简单性
  8. 节能prru进入深度休眠节能_2021-2024年中国工业节能行业深度调研及投资前景预测报告...
  9. 论文浅尝 | Data Intelligence 已出版的知识图谱主题论文
  10. Redis的五种存储类型和其应用场景
  11. VTD — 应用于智能驾驶复杂交通场景仿真工具
  12. 使用EditPlus 3时,如何重新设置HTML Page的Default模板
  13. 角度计算公式 角度换算 想知道1是多少度; 度和弧度的关系 弧微分: 曲率,曲半径,曲率圆:
  14. CSAPP第二章家庭作业
  15. Linux服务器远程连接
  16. 第三课:布尔逻辑与逻辑门
  17. 日本恐怖片《二重身》核心内容赏析
  18. Java的Random练习~~生成1~n之间的随机数
  19. 百度推广创意怎么写?百度推广创意十大秘籍
  20. Si基相控阵技术的相关进展1

热门文章

  1. Beamer 目录分栏
  2. lava.lang.String数据转换为java.sql.Date
  3. 反射(操作MetaData)
  4. 安卓GreenDao框架一些进阶用法整理(转)
  5. Protocol Buffer搭建及示例
  6. Swift - 12 - 区间运算符和for-in
  7. 拜读了《婆媳关系好坏取决于老公》一文,看似有道理,细读感觉其实应该不是那么回事...
  8. 高效算法——E - 贪心-- 区间覆盖
  9. Behavior Trees
  10. Cocoa touch(十):UIDatePicker