当异常被抛出时,将造成相当多的运行时开销
这是有益的开销,因为担心被自动清理了
不要将异常作为正常控制流的一部分使用
一个throw表达式就像是一个特殊的系统函数调用,它接收异常对象作为
参数并且沿着执行调用链向上回溯
每当函数被调用的时候,有关这个函数的信息被压到栈顶部的活动记录实例
activation record instance,ARI中,也叫栈结构
对于异常处理机制系统允许栈反解,每个函数额外的异常相关信息,必须
对每一个栈结构都是可用的
//: C01:HasDestructor.cpp {O}
// From "Thinking in C++, Volume 2", by Bruce Eckel & Chuck Allison.
// (c) 1995-2004 MindView, Inc. All Rights Reserved.
// See source code use permissions stated in the file 'License.txt',
// distributed with the code package available at www.MindView.net.
class HasDestructor {
public:
~HasDestructor() {}
};
void g(); // For all we know, g may throw.
void f() {
HasDestructor h;
g();
} ///:~
如果允许异常处理,编译器必须为f()变成有关析构函数~HasDestructor()在运行
时的大量信息到ARI中 活动记录实例
额外的管理工作会降低执行速度,但是聪明的编译器会避免这种情况
无输出
可编译,当没有main()函数 无法运行