$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Jeremy Day (jeremy.day_at_[hidden])
Date: 2006-07-21 08:35:18
On 7/21/06, Sebastian Redl <sebastian.redl_at_[hidden]> wrote:
>
> The use case for uncaught_exception() is quite simple: it allows
> destructors to take different actions depending on whether they're
> destructed due to stack unwind or a different reason.
> I've used it in a thin wrapper around jpeglib: there you have to wrap
> the encoding/decoding process in matching function calls, with different
> end calls depending on whether an error occurred.
I have done a similar thing with uncaught_exception(). I have a wrapper
around a series of database primatives, and my destructor looks something
like this:
database_wrapper::~database_wrapper(void)
{
if(std::uncaught_exception())
{
//Something went wrong, and I cannot be certain that the state of the
transaction is valid.
rollback_transaction();
}
else
{
//My wrapper is being destroyed on account of leaving scope, so the
transaction is good.
commit_transaction();
}
}
This type of activity is very common in any object involved in the oddly
name Resource Acquisition is Initialization (RAII) idiom.
Jeremy