C++ Primer 5th笔记(chap 18 大型程序工具)异常处理

2024-03-28 08:38

本文主要是介绍C++ Primer 5th笔记(chap 18 大型程序工具)异常处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 异常处理 ( exception handling)

允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理。

异常使得我们能够将问题的检测与解决过程分离开来。 程序的一部分负责检测问题的出现, 然后解决该问题的任务传递给程序的另一部分

1.1 栈展开( stack unwinding)

当抛出一个异常后, 程序暂停当前函数的执行过程并立即开始寻找与异常匹配的catch 子句。 当 throw 出现在一个 try 语句块( try block) 内时, 检查与该 try 块关联的 catch 子句。 如果找到了匹配的 catch, 就使用该 catch 处理异常。 如果这一步没找到匹配的 catch 且该 try 语句嵌套在其他 try 块中, 则继续检查与外层 try 匹配的catch 子句。 如果还是找不到匹配的 catch, 则退出当前的函数, 在调用当前函数的外层函数中继续寻找。

当找不到匹配的 catch时, 程序将调用标准库函数 terminate, 顾名思义, terminate 负责终止程序的执行过程

1.2 栈展开过程中对象被自动销毁

1.3 析构函数与异常

如果一个块分配了资源, 并且在负责释放这些资源的代码前[(D 发生了异常, 则释放资源的代码
将不会被执行。 另 --方面, 类对象分配的资源将由类的析构函数负责释放

1.4 异常对象( exception object )

编译器使用异常抛出表达式来对异常对象进行拷贝初始化

当抛出一条表达式时, 该表达式的静态编译时类型决定了异常对象的类型。 因为很多情况下程序抛出的表达式类型来自于某个继承体系。 如果一条 throw 表达式解引用一个基类指针, 而该指针实际指向的
是派生类对象, 则抛出的对象将被切掉一部分, 只有基类部分被抛出。

这篇关于C++ Primer 5th笔记(chap 18 大型程序工具)异常处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855066

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

Python中异常类型ValueError使用方法与场景

《Python中异常类型ValueError使用方法与场景》:本文主要介绍Python中的ValueError异常类型,它在处理不合适的值时抛出,并提供如何有效使用ValueError的建议,文中... 目录前言什么是 ValueError?什么时候会用到 ValueError?场景 1: 转换数据类型场景

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用