class exception { ... }; // 来自标准C++库(STL) // 中的异常类层次 void someFunction() { static exception ex; // 异常对象 ... throw &ex; // 抛出一个指针,指向ex ... } void doSomething() { try { someFunction(); // 抛出一个 exception* } catch (exception *ex) { // 捕获 exception*; ... // 没有对象被拷贝 } } |
void someFunction() { exception ex; // 局部异常对象; // 当退出函数的生存空间时 // 这个对象将被释放。 ... throw &ex; // 抛出一个指针,指向 ... // 已被释放的对象 } |
void someFunction() { ... throw new exception; // 抛出一个指针,指向一个在堆中 ... // 建立的对象(希望 } // 自己不要再抛出一个 // 异常!) |
class exception { // 如上,这是 public: // 一个标准异常类 virtual const char * what() throw(); // 返回异常的简短描述. ... // (在函数声明的结尾处 // 的"throw()", }; //有关它的信息 class runtime_error: //也来自标准C++异常类 public exception { ... }; class Validation_error: // 客户自己加入个类 public runtime_error { public: virtual const char * what() throw(); // 重新定义在异常类中 ... //虚拟函数 }; // void someFunction() // 抛出一个 validation { // 异常 ... if (a validation 测试失败) { throw Validation_error(); } ... } void doSomething() { try { someFunction(); // 抛出 validation } //异常 catch (exception ex) { //捕获所有标准异常类 // 或它的派生类 cerr << ex.what(); // 调用 exception::what(), ... // 而不是Validation_error::what() } } |
void someFunction() //这个函数没有改变 { ... if (a validation 测试失败) { throw Validation_error(); } ... } void doSomething() { try { someFunction(); // 没有改变 } catch (exception& ex) { // 这里,我们通过引用捕获异常 // 以替代原来的通过值捕获 cerr << ex.what(); // 现在调用的是 // Validation_error::what(), ... // 而不是 exception::what() } } |
新闻热点
疑难解答
图片精选