1. 当异常被抛出时,控制权会从函数调用中转移出来。栈中局部变量被析构,函数调用栈被unwinding。
2. 当new[15],在第10个的时候发生了异常,那么前面的9个数据会在try{}大括号结束的时候释放,即所谓的unwind。
3. 关于异常的性能、产生临时对象、匹配等问题,看代码和Exceptional C++。
4. 具备多态性质的类(polymorphic class),必须内含着继承而来或者自己定义的virtual function。
5. 对于RTTI的支持,把RTTI对象放到vtbl的第一个slot里面,这样对空间是:一个类只有一个指针的额外支出。
6. Dynamic_cast比static_cast要花费更多的性能(检查RTTI释放匹配、指针offset等),但是安全性更好。
7. 对引用施加Dynamic_cast:1)成功;或2)抛出bad_cast异常;对指针施加:1)成功;2)返回0指针。
8. 使用typeid()进行判断,合法之后再进行Dynamic_cast,这样就能够避免对引用操作导致的bad_cast异常: if(typeid(rt) == typeid(rt2)) …。但是如果rt和rt2本身就是合法兼容的话,就会损失了一次typeid的操作性能。
示例代码: