Re: throwing exceptions from constructor and other alternatives
wrybred wrote:
kanze wrote:
Not really. We can always use assert, and abort if the
class cannot respect its invariants. If it is reasonably
possible for the user to verify before hand that his
proposed arguments will allow the class to respect its
invariants, then this can even be a preferred alternative.
Such checks are not always possible, however, and even when
possible, may have unacceptable overhead.
Except when we can't assert(). Assert often falls out in
release builds (e.g., glibc and MSVCRT), leaving an unchecked
value.
Since when? I've never had assert "fall out" with g++ or with
VC++. And I've never had delivered production code without all
assert's active.
Asserts are a nice debugging tool, but in production code
they're usually not appropriate because of their overhead.
And testing the condition to raise an exception doesn't have the
same overhead?
It would help if people would read what I wrote. I said simply
that one way a class can ensure its invariants is by moving them
out as pre-conditions. I then immediately clarified that it
isn't always possible, even in cases where it might be a good
idea.
--
James Kanze GABI Software
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]