18.1 在下列 throw
语句中异常对象的类型是什么?
答:
- (a):
range_error
- (b):
exception
18.2
当在指定的位置发生了异常时将出现什么情况?
答:
指针p
指向的内容不会被释放,将造成内存泄漏。
18.3 要想让上面的代码在发生异常时能正常工作,有两种解决方案。请描述这两种方法并实现它们。
答:
用智能指针
或不用指针,改用对象
18.4 查看图18.1所示的继承体系,说明下面的 try
块有何错误并修改它。
答:
细化的异常类型应该写在前面
18.6 已知下面的异常类型和 catch
语句,书写一个 throw
表达式使其创建的异常对象能被这些 catch
语句捕获:
答:
(a): throw exceptionType();
(b): throw expection();
(c): EXCPTYPE e = 1; throw e;
18.14 假设下面的 operator*
声明的是嵌套的命名空间 mathLib::MatrixLib
的一个成员:
请问你应该如何在全局作用域中声明该运算符?
答:
18.18 已知有下面的 swap
的典型定义,当 mem1
是一个 string
时程序使用 swap
的哪个版本?如果 mem1
是 int
呢?说明在这两种情况下名字查找的过程。
答:
std::swap
是一个模板函数,如果是string
会找到string
版本;反之如果是int
会找到int
版本。
18.19 如果对 swap
的调用形如 std::swap(v1.mem1, v2.mem1)
将会发生什么情况?
答:
会直接调用std
版的swap
,但对后面的调用无影响。