If you specify a class type for the argument of a catch block (the
exception_declaration), the compiler uses a copy constructor to
initialize that argument. If that argument does not have a name, the
compiler initializes a temporary object and destroys it when the handler
exits.
The ISO C++ specification does not require the compiler to construct temporary objects in cases where they are redundant.
Related References
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.