Consider the following program:
class Exception {};
int main()
{
try
{
throw Exception(); // where is the exception stored?
}
catch( Exception & ex) // catch by reference
{}
}
The handler catches the exception by reference, not by value. Catching exception by reference is recommended because it's more efficient and it avoids slicing when handling a derived exception object. However, a reader who read this recommendation was intrigued: "If the exception object is created on the stack, why doesn