直接throw; 而后面不跟任何参数,是将所catch到的exception直接抛出,这样可以避免复制exception对象。
#include <exception>
#include <iostream>
using namespace std;
class Exception : public exception{
public:
Exception(){
cout<<"Exception()"<<endl;
}
Exception(const Exception &){
cout<<"Exception(const Exception&)"<<endl;
}
};
void fun(){
throw Exception();
}
void fun2(){
try{
fun();
}
catch(const Exception& e){
throw; // 不是throw e; (1)
}
}
int main(){
try{
fun2();
}
catch(const Exception &e){
// 至此,可以观察到,Exception对象仅仅被构造了一次
// 如果把(1)处改成“throw e;”,则可以看到Exception被构造了两次
}
return 0;
}