Re: Not what I expected from some exception code (throw/try/catch)
* stevewilliams2004@comcast.net:
I was wondering if someone could explain the output I am getting for
the program below. What I expected from the main program output was
"Cat" but instead I see "Mammal". The output is also included below.
I got the same results with GCC 3.4.4 under cygwin as with MSDev
studio 2003. Even stranger to me, if I change the catch statement to
catch a Cat instead of a Mammal, the program crashes
It would, yes, because the exception is then not caught and propagates
out of "main".
in the catch
body, during the call to m.MyType().
This I believe is a hypothesis of yours, and an incorrect one.
Thanks for any explanations in
advance.
Program:
#include <iostream>
using namespace std;
class Mammal
{
public:
Mammal()
{
cout << "Constructing Mammal @ " << this << endl;
}
Mammal(const Mammal& source)
{
cout << "Copy Constructing Mammal @ " << this << " from " <<
&source << endl;
}
~Mammal()
{
cout << "Destructing Mammal @ " << this << endl;
}
virtual const char* MyType()
{
return "Mammal";
}
};
class Cat : public Mammal
{
public:
Cat()
{
cout << "Constructing Cat @ " << this << endl;
}
Cat(const Cat& source)
{
cout << "Copy Constructing Cat @ " << this << " from " <<
&source << endl;
}
~Cat()
{
cout << "Destructing Cat @ " << this << endl;
}
virtual const char* MyType()
{
return "Cat";
}
};
int main(int argc, char *argv[])
{
Cat fluffy;
Mammal &fluffyRef = fluffy;
try
{
throw fluffyRef;
Formally, this copy constructs a Mammal to some Mammal instance (the
exception object) provided by the runtime support.
C++ "throw" is by value.
}
catch (Mammal &m)
If you don't intend to modify the object, catch by reference to const.
That way you document your intentions, in the source code. Which is
generally the best place to document such low-level details.
{
cout << "Caught a " << m.MyType() << endl;
return 0;
}
cout << "Nothing Caught" << endl;
return 0;
}
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?