Exception Safe Programming
Jarrett Billingsley
kb3ctd2 at yahoo.com
Sat Feb 24 15:21:39 PST 2007
"Saaa" <empty at needmail.com> wrote in message
news:erqh38$2hen$1 at digitalmars.com...
> On the website there is the following example:
>
> Transaction abc()
> {
> Foo f;
> Bar b;
>
> f = dofoo();
> try
> {
> b = dobar();
> return Transaction(f, b);
> }
> catch (Object o)
> {
> dofoo_undo(f);
> throw o;
> }
> }
>
> When f=dofoo() is run and doesn't succeed I suspect that f hasn't changed
> and dofoo has thrown an exception.
> Because of the exception the try part isn't run, but the catch part is.
> Did I understand this correctly?
Nope. If "f = dofoo()" fails and an exception is thrown, that catch block
is not run, because "f = dofoo()" is outside the try block. A catch block
is only run if an uncaught exception occurs in the try block right before
it. Since "f = dofoo()" is not in a try block, any exception from it will
just be thrown out of abc().
More information about the Digitalmars-d-learn
mailing list