folly::TryException inherits from std::logic_error, like...
folly::TryException inherits from std::logic_error, like std::bad_optional_access; becomes no-throw copyable Summary: folly::TryException was inheriting from std::exception and managing its own message in a std::string data member. That is suboptimal for the following reasons: 1) The analagous std:: type, std::bad_optional_access, inherits from std::logic_error. According to the Principle of Least Astonishment, folly::TryException should follow suit. 2) std::logic_error has a nothrow copy constructor. (This is typically implemented with a ref-counted string.) std::string does not. By explicitly managing its own message, folly::TryException picks up a throwing copy constructor. Exception classes should try to be nothrow copyable. 3) With most stdlib implementations, std::string is larger by a lot than the std:: exceptions. By changing folly::TryException as suggested, its size drops from 40 bytes to 16 on clang and gcc >=5.0. Reviewed By: yfeldblum Differential Revision: D4368760 fbshipit-source-id: 327f78f428419ccf9c7af3e0f57cc478d147fb37
Showing
Please register or sign in to comment