|
Boost : |
From: Thomas Beckmann (beckmann.bremen_at_[hidden])
Date: 2005-01-09 14:25:17
At 16:56 09.01.2005 +0100, you wrote:
> > Actually, that try block exists for only the specific case when the
> > constructor throws... I'm not sure how it could be implemented via RAII,
> > as dependencies should only be decremented upon failure. The dtor itself,
> > and thus ReleaseDependency, should not be called if new or the ctor
> > throws.
> >
>
>struct undoer_t {
> int* value;
> undoer_t(int* val) value(val) {}
> ~undoer_t() { if (value) --*value; }
> void dismiss() { value = 0; }
>} undoer(&dependents);
>
>..... possibly throwing operation
>
>undoer.dismiss();
Wouldn't it be easier to change AddDependency to something like the following:
static void AddDependency ( )
{
static bool first = true;
if ( first ) {
s_inst = static_cast < T * > ( A :: Create ( ) );
dependents = 0;
first = false;
}
++dependents;
}
Thomas Beckmann
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk