destructor is called.
Here is my code and output, let me know if you have any comments. Thanks. :-)
George wrote:
Thanks Ben,
1.
With /EHa, SEH and C++ exceptions may be mixed, but not in the same
I agree and this is what we proved in his thread before.
2.
function. Separate the __try block body into a separate function.
What do you mean separate the __try block into another function? We
George, why do you always misquote people? I did not say "separate the
__try block into another function", but "Separate the __try block body into
a separate function."
For example, this can't work:
void f(void)
{
__try {
this_could_fail();
auto_ptr<T> temp = new T();
temp->something_likely_to_fail();
}
__finally {
}
}
The problem is the mixing of C++ destructors with SEH, because both need
unwinding. Whether the destructor for temp should be called depends on
whether the constructor completed. So we make the body of the __try block a
separate function:
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.
always provide try/catch or __try/__except into the same function. I
am confused. Could ytou provide some pseudo code to show your points
please?
regards,
Geprge
"Ben Voigt [C++ MVP]" wrote:
Igor Tandetnik wrote:
"George" <George@discussions.microsoft.com> wrote in message
news:625FF32F-F1B8-4989-B476-8272396CA81A@microsoft.com
I compile with /EHa, and not /EHsc, and this is why I have
confusion there is such error.
Double-check your project settings (perhaps you have a file-level
override). The documentation claims C2712 error should not be
produced under /EHa.
With /EHa, SEH and C++ exceptions may be mixed, but not in the same
function. Separate the __try block body into a separate function.