C++异常机制的执行顺序。

在构造函数内抛出异常

/*
* ExceptClass.h
*
* Created on: 2018年1月2日
* Author: jacket
*/ #ifndef EXCEPTCLASS_H_
#define EXCEPTCLASS_H_ #include <iostream> using std::cout;
using std::endl; class ExceptClass {
public:
ExceptClass(){
cout<<"ExcepClass"<<endl;
throw int();
}
void start(){
} virtual ~ExceptClass() {
cout<<"~ExcepClass"<<endl;
}
}; #endif /* EXCEPTCLASS_H_ */

如果外部没有try catch,输出

ExcepClass
terminate called after throwing an instance of 'int'

如果外部try catch

ExcepClass
Catch

在start()内抛出异常

/*
* ExceptClass.h
*
* Created on: 2018年1月2日
* Author: jacket
*/ #ifndef EXCEPTCLASS_H_
#define EXCEPTCLASS_H_ #include <iostream> using std::cout;
using std::endl; class ExceptClass {
public:
ExceptClass(){
cout<<"ExcepClass"<<endl;
}
void start(){
throw int();
} virtual ~ExceptClass() {
cout<<"~ExcepClass"<<endl;
}
}; #endif /* EXCEPTCLASS_H_ */

如果外部没有try catch

ExcepClass

terminate called after throwing an instance of 'int'

如果外部try catch

ExcepClass
~ExcepClass
Catch

所以,如果在构造函数内抛出异常,析构函数将不被调用。如果在其他函数内抛出异常,析构函数会被调用。

而且如果外部没有try catch不会调用析构函数,说明C++抛出异常后是先回退(好像是栈有关的回退),检测到异常会被捕捉才进入析构函数。

刚试了下有try catch但捕捉类型改为float,也不会进入析构函数。

Exception机制还有有多注意点。在学习过程中参考了不少文章。

C++异常处理之abort()、异常机制、exception 类(从这里开始了解到)

C++异常(exception)第一篇--综合讲解(这个最有深度,很多注意点)

C++处理异常 try,catch,throw

知乎上看到一些人评价c++的exception很难用,想问一下大家写c++时怎么处理错误?(很多大神透露的经验,还要继续吃透)

深入理解C++异常(好像有深入的讲解,但我没细看)

C++自定义异常处理(其实没啥用,但是一开始不懂异常机制是什么,还以为要有啥规范)

C++ 标准库中的异常(在linux下试了下logic_error,segfault,确定是在构造logic_error时报错,没找原因直接继承exception自定义了)

C++ Exception机制的更多相关文章

  1. Exception异常处理机制

    为什么要自定义自己的Exception ,Java Exception机制与传统的C语言的异常处理机制有什么不同,这种Exception机制的意义在什么地方?接下来咱就来和你一起探讨Exception ...

  2. CSAPP Chapter 8:Exception Control Flow

    prcesssor在运行时,假设program counter的值为a0, a1, ... , an-1,每个ak表示相对应的instruction的地址.从ak到ak+1的变化被称为control ...

  3. C++异常处理:try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

  4. C++异常处理: try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

  5. C/C++相对论——C++中为什么要使用异常?

    C++中为什么要使用异常? 很多人也许知道C++中的异常机制,很多人也许不知道.很多人知道C中常用的assert,也知道在编译时候指定NODEBUG来忽略它. 对于C语言,使用正常的if-else即是 ...

  6. Delphi中的异常处理

    转载:http://www.cnblogs.com/doit8791/archive/2012/05/08/2489471.html 以前写Delphi程序一直不注意异常处理,对其异常处理的机制总是一 ...

  7. 转:delphi异常捕获try except语句 和 try finally语句用法

    转:http://www.java123.net/v/936977.html      2015-06-24 09:27:48 一直写程序都没管他们,也尽量很少用,今天终于想把他给弄个明白,在网上找来 ...

  8. C/C++相对论——C++中为什么要使用异常(跳转语句会造成对象没有被析构)

    C++中为什么要使用异常? 很多人也许知道C++中的异常机制,很多人也许不知道.很多人知道C中常用的assert,也知道在编译时候指定NODEBUG来忽略它. 对于C语言,使用正常的if-else即是 ...

  9. mysql 海量数据的存储和访问解决方案

    第1章  引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互 联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的 ...

随机推荐

  1. 获取DataSet中某行某列的数据

    LabelText = DataSet11.Tables("COMM.USERS").Rows[0]["User_Name"].tostring() Label ...

  2. Java多线程之静态代理

    package org.study2.javabase.ThreadsDemo.staticproxy; /** * @Date:2018-09-18 静态代理 设计模式 * 1.真实角色 * 2.代 ...

  3. jpa 比较复杂的查询和用in关键字

    in关键字使用代码

  4. 使用aapt查看当前apk的属性

    android:versioncode——整数值,代表应用程序代码的相对版本,也就是版本更新过多少次. android:versionname——字符串值,代表应用程序的版本信息,需要显示给用户. e ...

  5. 51Nod1778 小Q的集合 【组合数】【Lucas定理】

    题目分析: 题解好高深...... 我给一个辣鸡做法算了,题解真的看不懂. 注意到方差恒为$0$,那么其实就是要我们求$\sum_{i=0}^{n}\binom{n}{i}(i^k-(n-i)^k)^ ...

  6. poi的cellstyle陷阱,样式覆盖

    问题 cell.getCellStyle().setFont(font); 这句话本来只是想设置这一个单元格cell的字体样式,但是实际上却影响了很多个单元格的样式. 问题出在了,Excel模板中这些 ...

  7. 解决"mysql-bin.000001"占用超大空间的问题

    描述:mysql-bin.000001.mysql-bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件 ...

  8. Codeforces 700 C. Break Up(Tarjan求桥)

    题意 给你一个有 \(n\) 个点, \(m\) 条边的无向图,每条有边权 \(w_i\) ,现在要选择至多两条边断开,使得 \(S, T\) 不连通,并且使得边权和尽量小. \(n \le 1000 ...

  9. Leetcode 345. 反转字符串中的元音字母 By Python

    编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leet ...

  10. Hdoj 2454.Degree Sequence of Graph G 题解

    Problem Description Wang Haiyang is a strong and optimistic Chinese youngster. Although born and bro ...