10.6.2  特殊异常处理

10.6.2 特殊异常处理

1.类bad_exception

类bad_exception的声明形式为:

978-7-111-51399-5-Chapter10-94.jpg

类bad_exception用于定义被抛出异常对象的类型。其构造函数为:

978-7-111-51399-5-Chapter10-95.jpg

功能:构造类bad_exception的对象。提示:对于新构造的对象,调用what()函数时,结果是预先定义的。

978-7-111-51399-5-Chapter10-96.jpg

上述两个函数用以实现类bad_exception的对象的备份,即构造并产生新的对象。

978-7-111-51399-5-Chapter10-97.jpg

函数返回值是已定义的NTBS。返回的信息是以空(NULL)为结束标识符的多字节字符串。此函数也适用于宽字节的转换和显示。

2.unexpected_handler

978-7-111-51399-5-Chapter10-98.jpg

当函数尝试抛出一个异常时(该异常并未在异常说明中列出),句柄函数会通过unex-pected()函数调用。

一个非期望的句柄(unexpected_handler)不会被返回。默认的unexpected_handler调用会终止。

3.set_unexpected

978-7-111-51399-5-Chapter10-99.jpg

功能:创建使用指针f指定的函数,作为当前的unexpected_handler句柄。值得注意的是,f不应该是空指针,函数返回值是之前的unexpected_handler型句柄。

4.unexpected

unexpected函数的声明形式为:

978-7-111-51399-5-Chapter10-100.jpg

当函数存在时,是通过异常实现调用的;也可以在程序中直接调用。在ISO/IEC14882C++标准中,此段英文原文应该是:“Called by the implementation when a function exits via an exception not allowed by its exception specification.May also becalled directly by the program.”

评估throw表达式之后,即可快速、有效地调用unexpected_handler类型函数。通常此函数在执行过程中被调用,或者调用当前unexpected_handler;也可以在程序中直接调用。