|
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