Hi Ben,
void fhelper(void)
{
this_could_fail();
auto_ptr<T> temp = new T();
temp->something_likely_to_fail();
}
void f2(void)
{
__try {
fhelper();
}
__finally {
}
}
Now the local inside fhelper can be properly unwound when a
structured exception is thrown, because they exist in a unique stack
frame that the compiler support for SEH knows how to deal with.
In your solution, you cares about whether the destructor of local
will be called or not. I think you mean variable temp in your case,
which is the only local variable.
When there is structured exception thrown, I think even if you do not
put
the __try block into another function, destructor of temp will still
be called? Because either structured or unstructured (C++ exception)
will make stack unwinding. It is my mistake before which think
structured exception will not cause stack unwinding, but through
testing, it will.
Why do you think if we put everything into one function will not
invoke temp's destructor? I think even if there is structured
exception in something_likely_to_fail, destructor of temp is still
called.
Any more description please? Or you write a simple sample to prove
your ideas?
If you put everything in one function, it won't even compile. That's why