Here is a very strange thing which I don't think should happen:
UnicodeString test = "abc";
try
{
try
{
int a = 123;
return a; // This seems to produce a problem with "test" variable scope
}
catch (Exception &e)
{
// Some exception handler here
}
}
__finally
{
// At this point the "test" variable should still be in scope???
test = "xyz"; // PROBLEM here - test is NULL instead of "abc"! Why?
}
If I remove the return a;
in the try-catch
block the test variable is still defined. Is there a particular reason why after the above construct the UnicodeString seems to go out of scope? Is it a bug with C++ Builder 2010? I understand that return returns from function but it should still retain variable scope in the __finally
block shouldn't it?
I did a bit more analysis and it seams that once you execute
return
statement all local objects from stack are acting as destroyed. If you try using heap objects instead this won't happen.Using smart pointers like
unique_ptr
will again result in loosing an object in__finally
sincereturn
will initiate it's destruction.