Boost logo

Boost :

From: Bo Persson (bop_at_[hidden])
Date: 2004-03-27 10:06:51


"Reece Dunn" <msclrhd_at_[hidden]> skrev i meddelandet
news:BAY7-F123eo6WutfjDM00010dd8_at_hotmail.com...
> Klaus Nowikow wrote:
> >Reece Dunn wrote:
> >[snip]
> > > A trick I use when handling HRESULT error codes is to have a
> > > class like this
> > > (adapted for int error type):
> > >
> > > class errorcheck
> > > {
> >[snip]
> > > public:
> > > inline errorcheck( int ec ): error( ec )
> > > {
> > > if( ec < 0 ) throw( *this );
> > > }
> >
> >Careful. Throwing an exception from a constructor
> >means that the object won't be constructed (i. e., does not exist).
> >So you are throwing a non-existing object here.
> >
> >Or am I wrong?
>
> If I've got the standard correct, the object will be partially constructed
> up to the point where the exception is thrown. Thus, if this throws an
> exception, the error member will be set.

No, when the constructor fails any partial construction will be undone by
calling the destructors for those subobjects.

A destructed int will probably look the same as before, but legally it is
not there anymore.

If you do a

new errorcheck(-1);

the memory will be deallocated too.

Bo Persson


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk