异常被抛出后,从进入 try 块起到异常被抛出前,这期间在栈上构造的所有对象都会被自动析构,析构的顺序与构造的顺序相反。
与 return 类似
class Test{
public:
Test(string name){
m_name = name;
cout << m_name << "被构造了" << endl;
}
~Test(){
cout << m_name << "被析构了" << endl;
}
private:
string m_name;
};
double func1(int x, int y){
Test t1("t1"), t2("t2");
if(y == 0){
throw y;
}
return x / y;
}
int main()
{
try{
Test t3("t3"), t4("t4");
func1(10, 0);
}
catch(int e){
cout << "除数为 " << e << endl;
}
return 0;
}
t3被构造了
t4被构造了
t1被构造了
t2被构造了
t2被析构了
t1被析构了
t4被析构了
t3被析构了
除数为 0