Yes, everything in the try block, including function calls, objects and other variables will be destroyed, poped or just disappear, because they go out of scope. Everything before the try block will remain intact.
A way to look at exceptions is this:
For each function, the compiler will use a "return" statement, so the local variables are poped, destructors are called, etc, until it reaches the function that handles the exception. There it will jump to the catch handler and that means everything in the try block goes out of scope, so variables are poped and destructors are called.
You don't.
Code:
void Help2(int& n)
{
n = 7;
throw 1;
}
void Help()
{
int n = 0;
try
{
Help2(n);
}
catch(...)
{
cout << n << endl;
}
}
In the catch block, n will be 7.