The Right Approach to Exceptions

Pavel Vozenilek pavel_vozenilek at hotmail.com
Sun Feb 19 12:17:24 PST 2012


On Sun, 19 Feb 2012 03:04:35 +0100, Alf P. Steinbach  
<alf.p.steinbach+usenet at gmail.com> wrote:

> However, C++ exceptions do have many problems, including:
>
>    * Until C++11, no support for propagating exceptions through
>      non-exception-aware code (in particular, from C callbacks).
>
>    * No support for wchar_t exception text, i.e. *nix-specific.
>
>    * A nonsensical exception class hierarchy with e.g.
>      std::logic_error and std::bad_exception.
>
>    * No differentiation between recoverable (soft, failure) and
>      unrecoverable (hard, error) exceptions, although some people have
>      argued that in the latter case one is screwed anyway.
>
>    * Involving std::string arguments, so that in low memory
>      conditions throwing an exception can itself throw.
>


Two even worse problems:

a) you see

   foo();

and have no idea whether and what it may throw. No, the documentation is  
never so detailed and I woudn't trust it anyway.


b) you see

try {
   foo();
} catch (some_exc& e) {
   handle(e);
}

and have no easy way to check whether the 'some_exc' can be really thrown  
 from inside foo(). Maybe not and they forgot to remove the catch.


c) you see

try {
   foo();
} catch (some_exc& e) {
   handle(e);
}

and there's no easy way to spot that the 'some_exc' is already fully  
handled inside and thus is useless here.



The Java way is overkill but complete ignorance by the compiler isn't good  
either.

/Pavel


More information about the Digitalmars-d mailing list