Exception Class Clonability
In Java, the value thrown is generally a newly created heap-based object, formed using the new operator.
In C++, the object is often a nameless temporary value, formed by simply naming the class and any arguments used by the constructor.
Always write a copy constructor for any user-defined exception class.