设为首页 加入收藏

TOP

15.3.8 exception类(2)
2013-10-07 15:46:17 来源: 作者: 【 】 浏览:92
Tags:15.3.8 exception

15.3.8  exception类(2)

接下来,runtime_error异常系列描述了可能在运行期间发生但难以预计和防范的错误。每个类的名称指出了它用于报告的错误类型:

range_error;

overflow_error;

underflow_error。

每个类独有一个类似于runtime_error的构造函数,让您能够提供一个供方法what( )返回的字符串。

下溢(underflow)错误在浮点数计算中。一般而言,存在浮点类型可以表示的最小非零值,计算结果比这个值还小时将导致下溢错误。整型和浮点型都可能发生上溢错误,当计算结果超过了某种类型能够表示的最大数量级时,将发生上溢错误。计算结果可能不再函数允许的范围之内,但没有发生上溢或下溢错误,在这种情况下,可以使用range_error异常。

一般而言,logic_error系列异常表明存在可以通过编程(www.cppentry.com)修复的问题,而runtime_error系列异常表明存在无法避免的问题。所有这些错误类有相同的常规特征,它们之间的主要区别在于:不同的类名让您能够分别处理每种异常。另一方面,继承关系让您能够一起处理它们(如果您愿意的话)。例如,下面的代码首先单独捕获out_of_bounds异常,然后统一捕获其他logic_error系列异常,最后统一捕获exception异常、runtime_error系列异常以及其他从exception派生而来的异常:

 

如果上述库类不能满足您的需求,应该从logic_error或runtime_error派生一个异常类,以确保您异常类可归入同一个继承层次结构中。

2.bad_alloc异常和new

对于使用new导致的内存分配问题,C++(www.cppentry.com)的最新处理方式是让new引发bad_alloc异常。头文件new包含bad_alloc类的声明,它是从exception类公有派生而来的。但在以前,当无法分配请求的内存量时,new返回一个空指针。

程序清单15.13演示了最新的方法。捕获到异常后,程序将显示继承的what( )方法返回的消息(该消息随实现而异),然后终止。

程序清单15.13  newexcp.cpp

 
 
下面该程序在某个系统中的输出:

 

在这里,方法what( )返回字符串"std::bad_alloc"。

如果程序在您的系统上运行时没有出现内存分配问题,可尝试提高请求分配的内存量。

3.空指针和new

很多代码都是在new在失败时返回空指针时编写的。为处理new的变化,有些编译器提供了一个标记(开关),让用户选择所需的行为。当前,C++(www.cppentry.com)标准提供了一种在失败时返回空指针的new,其用法如下:

 

使用这种new,可将程序清单15.13的核心代码改为如下所示:

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.3.8 exception类(1) 下一篇15.3.7 其他异常特性

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)
·Linux常用命令60条( (2025-12-25 00:50:40)
·nginx 监听一个端口 (2025-12-25 00:19:30)
·整个互联网就没有一 (2025-12-25 00:19:27)