|
Boost : |
From: David Abrahams (dave_at_[hidden])
Date: 2004-03-27 19:24:49
"Bo Persson" <bop_at_[hidden]> writes:
> "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.
Not before the exception object is copied and thrown.
-- Dave Abrahams Boost Consulting www.boost-consulting.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk