C++编程思想 第2卷 第1章 异常处理 使用异常造成的开销

当异常被抛出时,将造成相当多的运行时开销
这是有益的开销,因为担心被自动清理了

不要将异常作为正常控制流的一部分使用

一个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()函数 无法运行

猜你喜欢

转载自blog.csdn.net/eyetired/article/details/81582596