I have a silly question. I read this article about std::exception http://www.cplusplus.com/doc/tutorial/exceptions/
On catch (exception& e), it says:
catch (exception& e)
Using reference to exception here can reduce the temporary objects created, and it can also keep the polymorphism.