条款13 抛出一个异常和函数调用之间的区别
- 在抛出异常时,异常对象总是会被复制,无论抛出的是一个指针、对象还是引用。抛出的是指针时,将复制这个指针的内容(仅仅是地址,而不是对象,类似于浅拷贝),注意千万不要抛出局部对象的指针,不然外部捕获的将是一个悬垂的对象;抛出引用时,将以引用的静态类型(而不是动态类型)为蓝本进行复制;抛出一个对象时,还是会复制一个该对象,如果在捕获函数对象的时候,使用值传递的方式,甚至会复制2次。
- 捕获异常的时候,允许的转换动作要少一些。只允许2种形式:1.异常继承体系中的类转换。2.有型指针转换为void*指针的转换。
- 多个catch语句时,匹配采用的是first fit策略。虚函数则采用的是best fit策略。
读者认为,这里要将抛出异常和捕获异常的过程,分开来看。