Essential C++ 第7章 异常处理

简介: Essential C++ 第7章 异常处理

第7章 异常处理

7.1 抛出异常

异常处理机制有两个主要部分:异常的鉴定与发出,异常的处理。

C++通过throw表达式产生异常:

inline void Triangular_iteratir::
check_integrity()
{
if(_index>=Triangular::max__elems)
  throw iterator_overflow(_index,Triangular::max_elems);
}


throw表达式看起来有点像函数调用。

所谓 异常,是某种对象,最简单的异常对象可以是整数或字符串。

throw 42;

throw “no buffer”;


7.2 捕获异常

 使用单条或一串catch子句来捕获被抛出的异常对象。

 catch子句由3部分组成:关键字catch、小括号内的一个类型或对象、大括号的一组语句(用来处理异常)。

 如:catch(int errno){…}

     catch(iterator_overflow &iof){…}

 异常对象的类型会逐一和每个catch子句进行对比。类型符合则执行catch子句。

 如果我们无法完成异常的完整处理,在记录信息之外,或许需要重新抛出(throw),,寻求其他catch的协助。

 如果我们想捕获任何类型的异常,可以使用catch all方式catch(…)

 catch(…){…}



7.3 提炼异常

 catch子句和try块相应而生。 try块是以try开始,然后大括号一串语句,catch子句放在try块末尾。如果try块内发生异常,则由接下来的catch子句处理。


7.4 局部资源管理

auto_ptr是标准库提供的Class template,它会自动删除通过new分配的对象。


7.5 标准异常

如果new无法分配足够的内存,它会抛出bad_alloc异常对象。

标准库定义了一套异常类体系,其根部是名为exception的抽象基类。exception声明有一个what()虚函数,会返回一个const char*。用以表示被抛出异常的文字描述。


相关文章
|
3月前
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
74 2
|
5月前
|
编译器 C++
Essential C++ 第5章 面向对象编程风格
Essential C++ 第5章 面向对象编程风格
|
6月前
|
安全 C++
C++中的异常处理与错误处理机制
C++中的异常处理与错误处理机制
73 0
|
5月前
|
C++
C++一分钟之—异常处理try-catch
【6月更文挑战第22天】C++异常处理机制,借助`try`、`catch`、`throw`管理错误,优雅处理异常,防止程序崩溃。`try`包围可能出错的代码,`catch`捕获异常,`throw`引发异常。基本结构是:`try-catch`块中,未捕获的异常将向上抛出。多`catch`块可按顺序捕获不同类型的异常。易错点包括忽视异常传播、不精确的`catch`和资源未清理。通过精确捕获、RAII技术和适当的异常策略,提升代码健壮性和效率。
41 1
|
5月前
|
算法 C++ 容器
Essential C++ 第3章 泛型编程风格
Essential C++ 第3章 泛型编程风格
|
5月前
|
编译器 C++
Essential C++ 第2章 面向过程的编程风格
Essential C++ 第2章 面向过程的编程风格
|
5月前
|
C++
C++核心技术要点《异常处理详解》
C++核心技术要点《try-throw-catch异常处理详解》
51 2
|
5月前
|
程序员 编译器 C++
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
47 0
|
6月前
|
程序员 编译器 C++
C++中的异常处理:技术详解与实践
C++中的异常处理:技术详解与实践
112 1
|
5月前
|
C++
C++对C的改进和拓展\异常处理
C++对C的改进和拓展\异常处理
35 0