
"Reece Dunn" <msclrhd@hotmail.com> skrev i meddelandet news:BAY7-F123eo6WutfjDM00010dd8@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