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++ specifications do not require the compiler to construct temporary objects in cases where they are redundant. The compiler takes advantage of this rule to create more efficient, optimized code. Take this into consideration when debugging your programs, especially for memory problems.
Related References