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. python设计模式第九天【策略模式】

    1. 定义 对一系列算法进行封装,为所有算法定义一个抽象的算法接口,可以平滑的进行算法切换 2. 策略模式的UML图 3.代码实现 #!/usr/bin/env python #! _*_ codin ...

  2. Condition线程通信(七)

    前言:对于线程通信,使用synchronized时使用wait.notify和notifyAll来实行线程通信.而使用Lock如何处理线程通信呢?答案就是本片的主角:Condition. 一.Cond ...

  3. CSS遮罩效果和毛玻璃效果

    前面的话 本文将详细介绍CSS遮罩效果和毛玻璃效果 遮罩效果 普通遮罩 一般地,处理全屏遮罩的方法是使用额外标签 <style>.overlay{ position:fixed; top: ...

  4. poj-1273(最大流)

    题解:纯板子题... EK算法 #include<iostream> #include<algorithm> #include<cstring> #include& ...

  5. Nginx 优化缓冲区与传输效率

    L:126 这里简单的做个计算 比如 我的服务器带宽是 5M=41943040字节 如果按照公网用PIND的得到延迟结果 icmp_seq=3 ttl=49 time=35.612 ms BDP =  ...

  6. pycharm中查看源码的快捷键

    将光标移动至要查看的方法处,按住ctrl  点击鼠标左键,即可查看该方法的源码

  7. Idea中JavaWeb项目部署

    1. 添加应用服务器tomcat 2. 将tomcat配置添加到项目中 artifacts配置:添加deploy, 添加artifacts,选择Web Application: Exploded &g ...

  8. Oracle查看表空间,创建表空间

    查看表空间: SELECT tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) total_space FROM ...

  9. BZOJ4003[JLOI2015]城池攻占——可并堆

    题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池. 这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi ...

  10. 多校#5-1005-Instring-HDU5785-manacher+维护

    寻找三元组(i,j,k),使得(i,j)(j,k)都是回文字串,其中i<=j<k. 可以发现,对于每一位i,只要预处理出来有多少个以i为右端的回文串和以i为左端的回文串.把那些串的另一端的 ...