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*。用以表示被抛出异常的文字描述。


相关文章
|
16天前
|
编译器 C++
Essential C++ 第5章 面向对象编程风格
Essential C++ 第5章 面向对象编程风格
|
30天前
|
安全 C++
C++中的异常处理与错误处理机制
C++中的异常处理与错误处理机制
29 0
|
8天前
|
C++
C++一分钟之—异常处理try-catch
【6月更文挑战第22天】C++异常处理机制,借助`try`、`catch`、`throw`管理错误,优雅处理异常,防止程序崩溃。`try`包围可能出错的代码,`catch`捕获异常,`throw`引发异常。基本结构是:`try-catch`块中,未捕获的异常将向上抛出。多`catch`块可按顺序捕获不同类型的异常。易错点包括忽视异常传播、不精确的`catch`和资源未清理。通过精确捕获、RAII技术和适当的异常策略,提升代码健壮性和效率。
9 1
|
16天前
|
算法 C++ 容器
Essential C++ 第3章 泛型编程风格
Essential C++ 第3章 泛型编程风格
|
16天前
|
编译器 C++
Essential C++ 第2章 面向过程的编程风格
Essential C++ 第2章 面向过程的编程风格
|
18天前
|
C++
C++核心技术要点《异常处理详解》
C++核心技术要点《try-throw-catch异常处理详解》
18 2
|
2天前
|
程序员 编译器 C++
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
7 0
|
11天前
|
C++
C++对C的改进和拓展\异常处理
C++对C的改进和拓展\异常处理
7 0
|
1月前
|
程序员 编译器 C++
C++中的异常处理:技术详解与实践
C++中的异常处理:技术详解与实践
|
16天前
|
算法 编译器 C++
Essential C++第4章 基于对象的编程风格
Essential C++第4章 基于对象的编程风格