Re: Odd Exception Behavior
* none:
Alf P. Steinbach wrote:
You're absolutely not the first to walk into that, but perhaps one of
the first here to recognize it yourself -- at least, I can't
remember it happen b4.
I get lucky, on occaision. :) Is there any particular reason why str()
doesn't return by reference? Or, at least, why there isn't an
alternative method available to do so?
It would require the stream to hold a string instance.
Thus it would conflict with a main guideline of the design of the C++ language,
that you don't have to pay for what you don't use.
Some other tips for the code:
* "C"-prefix for a class is a Microsoft-ism, therefore (almost
automatically)
ungood.
Guilty as charged. I've been using the "C" prefix since the early days
of Visual Studio.
* The assignment operator implementaiton is a bit dangerous, think
about
assigning twice to same exception object.
I should be checking for "&rhs == this"?
That too, if you choose to implement the assignment operator that way.
But with the code as presented you can accumulate text by repeated assignments.
A generally better way is to let the data members copy themselves. Then the
autoamtically generated assignment operator is good enough. I.e. store strings
instead of streams.
* The copy function seems to jumble up the short and long messages,
anyway,
copy will not be perfect copy with the code as-is.
Yes, the idea was that the "thrower" would not need to set both the
short and long messages. If only one is set, the other will just be a
duplicate.
* The 'cast' operator should perhaps best be 'const'.
Ah, good point.
* Most importantly, the whole "stream whatever into a string" can
be
/separated/ as a very very simple class. Then it can be used for
whatever.
:-)
That's interesting. So I would basically be creating a "copyable
ostringstream."
Thanks a lot for the feedback.
I forgot to mention, unless this is meant as a "hard exception" class it should
preferably, directly or indirectly, derive from std::exception.
std::runtime_error is a generally good choice as base class for a custom
exception class.
Cheers & hth.,
- Alf