异常被抛出后,从进入 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