
on Tue Nov 25 2008, "vicente.botet" <vicente.botet-AT-wanadoo.fr> wrote:
----- Original Message ----- From: "Matt Gruenke" <mgruenke@intellivid.com> To: <boost@lists.boost.org> Sent: Tuesday, November 25, 2008 8:01 PM Subject: Re: [boost] [Thread] Win32 exception handling
Some compilers (certainly GCC) have the ability to preserve the stackframe from the time it was thrown (!), for uncaught exceptions. If you catch (...), then the destructors of all the locals will execute and you'll lose some information that could be instrumental in tracking down the cause of the exception.
For that reason, among others, it's good to avoid the catch/rethrow construct.
Please could some one explain in which cases the destructors of all the locals are not executed?
When the program exits due to an uncaught exception, it is up to the compiler vendor whether those locals will be destroyed. If you want to portably ensure destruction, put a catch(...) in main. If you want to portably ensure non-destruction in case of an uncaught exception, you're out of luck. You may of course have knowledge about your particular compiler.
Can the stack-frame be recovered in some way just before the destructors are called?
That's dependent on your specific compiler implementation. -- Dave Abrahams BoostPro Computing http://www.boostpro.com