C++ Exception机制
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++的exception很难用,想问一下大家写c++时怎么处理错误?(很多大神透露的经验,还要继续吃透)
深入理解C++异常(好像有深入的讲解,但我没细看)
C++自定义异常处理(其实没啥用,但是一开始不懂异常机制是什么,还以为要有啥规范)
C++ 标准库中的异常(在linux下试了下logic_error,segfault,确定是在构造logic_error时报错,没找原因直接继承exception自定义了)
C++ Exception机制的更多相关文章
- Exception异常处理机制
为什么要自定义自己的Exception ,Java Exception机制与传统的C语言的异常处理机制有什么不同,这种Exception机制的意义在什么地方?接下来咱就来和你一起探讨Exception ...
- CSAPP Chapter 8:Exception Control Flow
prcesssor在运行时,假设program counter的值为a0, a1, ... , an-1,每个ak表示相对应的instruction的地址.从ak到ak+1的变化被称为control ...
- C++异常处理:try,catch,throw,finally的用法
写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...
- C++异常处理: try,catch,throw,finally的用法
写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...
- C/C++相对论——C++中为什么要使用异常?
C++中为什么要使用异常? 很多人也许知道C++中的异常机制,很多人也许不知道.很多人知道C中常用的assert,也知道在编译时候指定NODEBUG来忽略它. 对于C语言,使用正常的if-else即是 ...
- Delphi中的异常处理
转载:http://www.cnblogs.com/doit8791/archive/2012/05/08/2489471.html 以前写Delphi程序一直不注意异常处理,对其异常处理的机制总是一 ...
- 转:delphi异常捕获try except语句 和 try finally语句用法
转:http://www.java123.net/v/936977.html 2015-06-24 09:27:48 一直写程序都没管他们,也尽量很少用,今天终于想把他给弄个明白,在网上找来 ...
- C/C++相对论——C++中为什么要使用异常(跳转语句会造成对象没有被析构)
C++中为什么要使用异常? 很多人也许知道C++中的异常机制,很多人也许不知道.很多人知道C中常用的assert,也知道在编译时候指定NODEBUG来忽略它. 对于C语言,使用正常的if-else即是 ...
- mysql 海量数据的存储和访问解决方案
第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互 联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的 ...
随机推荐
- Java 8 函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为 lambda 表达式. Lambda 表达式和方法引用 ...
- Python给照片换底色(蓝底换红底)
环境要求 Python3 numpy函数库 opencv库 安装 下载适应版本的numpy函数库,我电脑是WIN10 64位,安装的函数库是 numpy-1.13.1+mkl-cp36-cp36m-w ...
- 莫烦keras学习自修第二天【backend配置】
keras的backend包括tensorflow和theano,tensorflow只能在macos和linux上运行,theano可以在windows,macos及linux上运行 1. 使用配置 ...
- servletContext和request对象的生命周期比较
ServletContext: 创建:服务器启动 销毁:服务器关闭 域的作用范围:整个web应用 Request: 创建:访问时创建request 销毁:响应结束request销毁 域的作用范围:一次 ...
- 初识Xml。
/* * 一.Xml? * * 1.是什么? * Extensible markup Language 可拓展标记性语言 * 功能是 储存数据 * 1.配置文件 * 2.在网络中传输数据 * xml和 ...
- Map接口----Map中嵌套Map
package cn.good.com; import java.util.HashMap; import java.util.Iterator; import java.util.Map; impo ...
- 多线程的实现方式01 Thread
/* * 多线程 有三种实现方式 * 其一 Thread * * 写一个类 * * 1.让他继承 Thread * 2.重写thread中的run方法 * 3.创建子类对象就是在 创建线程! * 3. ...
- layui 提交表格不验证
form.on('submit(filter_save)', function (data) { 后面查找发现是提交按钮要放在form里面
- LODOP设置打印机不存在不打印
LODOP中打印机的选择有优先级的存在,如果程序中指定的是错误的打印机,那么会走下一个优先级,这样,就可能存在选择了打印机无效,从默认打印机打印出来了,可以在代码里加判断避免这一点. 打印机优先级简介 ...
- Ubuntu install flash
Software&Updates - Other Software - Canonical Parners sudo apt install adobe-flashplugin