C++ 异常处理执行过程
看《clean code》时,又遇到异常处理的例程。 看不明白是因为我一直都将异常处理束之高阁。
今天晚上下决心去找资料看看,看完之后觉得以前是把它想得太难,其实非常简单。
希望以后遇到问题,不要畏惧,争取搞懂。这是打基础的好时机,一点点的积累。
try throw catch.
异常处理的执行过程
(1)控制通过正常的顺序执行try语句,然后执行try块内的保护段。
(2)若保护段内没有引起异常,那么跟在try块后的catch子句就不执行。程序从异常被抛出try块跟随的最后一个catch子句在后面的语句继续执行下去。
(3)若发生异常,则根据类型找到合适的catch处理程序。若没有合适的处理程序,则继续像外层查找合适的处理程序。
(4)若一直未匹配到合适的处理程序。则函数terminate将被自动调用,即停止程序。
(5)若找到匹配的catch处理程序,catch处理程序被执行,接下来程序跳转到跟随在最后的处理程序之后的语句。
C++异常处理的真正能力,不仅在于他能够处理各种不同类型的异常,还在于它具有为异常抛掷前构造的所有局部对象自动调用析构函数的能力。
过程:
找到合适的catch处理程序。复制被抛掷的异常对象, try块开始到的异常发生之间构造(且尚未析构)的所有自动对象进行析构。析构顺序与构造的顺序相反。然后程序从最后一个catch处理之后开始恢复执行。
异常处理并不简单,曾看过一篇博客:如果想搞懂一个东西,至少要找到google前一百个页面,搞懂其中所有的疑问,精通并不简单。
参考文献:《C++语言程序设计(第三版)》,郑莉、董渊、张瑞丰编著,第十二章 异常处理。
C++ 异常处理执行过程的更多相关文章
- JSP的执行过程及其异常处理机制
1.JSP的执行过程 虽然JSP感觉上很像一般的HTML网页,但事实上它是以Servlet的形式被运行的.因为JSP文件在第一次运行的时候会先解释成Servlet源文件,然后编译成Servle ...
- LINUX内核分析第八周学习总结:进程的切换和系统的一般执行过程
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程切换的关 ...
- 20135202闫佳歆--week 8 进程的切换和系统的一般执行过程--学习笔记
此为个人笔记存档 week 8 进程的切换和系统的一般执行过程 一.进程调度与进程切换 1.不同的进程有不同的调度需求 第一种分类: I/O密集型(I/O-bound) 频繁的进行I/O 通常会花费很 ...
- Linux 第八周实验 进程的切换和系统的一般执行过程
姬梦馨 原创作品 <Linux内核分析>MOOC课程:http://mooc.study.163.com/course/USTC-1000029000 第八讲 进程的切换和系统的一般执行过 ...
- LINUX内核分析第八周总结:进程的切换和系统的一般执行过程
一.进程调度与进程切换 1.不同的进程有不同的调度需求 第一种分类: I/O密集型(I/O-bound) 频繁的进行I/O 通常会花费很多时间等待I/O操作的完成 CPU密集型(CPU-bound) ...
- 《Linux内核》第七周 进程的切换和系统的一般执行过程 20135311傅冬菁
进程的切换和系统的一般执行过程 一.内容总结与分析 进程调度与进程调度时机 进程调度需求的分类: 第一种分类方式: I/O -bound(频繁进行I/O,通常会花很多时间等待I/O操作) CPU-bo ...
- python函数的执行过程
对于 Python 常规函数,都只有一个入口,但会有多个出口如 return 返回或者抛出异常.函数从入口进入会一直运行到 return 语句或者抛出异常,中间不会暂停,函数一直拥有控制权.当运行结束 ...
- 深入源码分析SpringMVC执行过程
本文主要讲解 SpringMVC 执行过程,并针对相关源码进行解析. 首先,让我们从 Spring MVC 的四大组件:前端控制器(DispatcherServlet).处理器映射器(HandlerM ...
- ASP.NET Web API 过滤器创建、执行过程(二)
ASP.NET Web API 过滤器创建.执行过程(二) 前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器 ...
随机推荐
- 深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则
转: http://www.blogjava.net/xylz/archive/2010/07/03/325168.html 在这个小结里面重点讨论原子操作的原理和设计思想. 由于在下一个章节中会谈到 ...
- 【转】Jollen 的 Android 教學,#12: 如何建立選單 Menu
原文网址:http://www.jollen.org/blog/2009/06/jollen-android-programming-12.html Android應用程式的UI可以使用XML來定義, ...
- Ubuntu 12.04 使用Eclipse搭建C/C++编译环境
首先是安装Eclipse,方法有两种: 第一种是通过Ubuntu自带的程序安装功能安装Eclipse,应用程序->Ubtuntu软件中心,搜Eclipse安装即可. 第二 ...
- 【模拟】Codeforces 710B Optimal Point on a Line
题目链接: http://codeforces.com/problemset/problem/710/B 题目大意: 给N个点的坐标,在X轴上找到最靠左的点使得这个点到N个点距离之和最小. 题目思路: ...
- 【单调栈】Vijos P1926 紫色的手链
题目链接: https://vijos.org/p/1926 题目大意: 给n个数(n<=100 000),求任意区间的最大值异或次大值的最大值. 题目思路: [模拟][单调栈] 我们维护一个严 ...
- IIS6.0部署asp.net网站步骤图解
IIS 发布步骤 1, 程序->运行->输入inetmgr,打开IIS管理器; 2, 展开左侧树形目录->右击“网站”->新建->网站,打开网站创建向导; 3, 点击“下 ...
- Search Insert Position——LeetCode
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- svn server安装配置
安装平台:RHEL5 1.安装软件:httpd.subversion.mod_dav_svn 2.修改配置 修改/etc/httpd/conf.d/subversion.conf.eg: LoadMo ...
- poj 1631 LIS
题目链接:http://poj.org/problem?id=1631 #include <cstdio> #include <cstring> #include <io ...
- hdoj 2085 核反应堆【水】
核反应堆 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...