Re: exception catch
* Rahul:
On Dec 8, 4:04 pm, Ian Collins <ian-n...@hotmail.com> wrote:
Rahul wrote:
Hi Everyone,
I have the following exception class,
class E1
{
};
class E2
{
public: E2(const E1&)
{
printf("automatic type conversion\n");
}
};
int main()
{
try
{
throw E1();
}
catch(E2 obj)
Don't catch exceptions by value, use a const reference.
--
Ian Collins.
Why do you say that exception's should be caught by value?
is it because of object slicing when a derived class exception is
caught by a base class exception handler?
On reason is to avoid copy construction.
Consider the case where the copy constructor might trow (e.g. allocating
a string).
A copy construction exception at the throw point is bad but at least you
do get an exception -- just not necessarily the one you asked for --
but a copy construction exception at catch point is t r o u b l e.
Another reason is efficiency, avoiding the possible copying.
And a third reason is clarity: by catching by reference to const you're
telling the reader of the source code that you're not going to modify
this exception object, and you don't need it copied.
Since catching by reference to const is the most common idiom, anything
else indicates that for some reason you need something else.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?