// 栈解旋(unwinding)：当抛出异常时，会调用所有对象的析构函数
#include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;

class A
{
public:
    A() { cout << "A()" << endl; }
    ~A() { cout << "~A()" << endl; }
};

int main()
{
    try
    {
        A a1;
        // 栈解旋(unwinding)：当抛出异常时，会调用所有对象的析构函数
        throw 0; // 抛出异常时，则会调用 a1 的析构函数
    }
    catch (...) // ... 表示其他异常，可以不写，写的话必须放在最后
    {
        cout << "异常被处理" << endl;
    }

    return 0;
}
