Catch Exceptions by Reference to Avoid Slicing #1990
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Preserve messages from derived exceptions for more informative logging.
Catching them by value means making a copy of the thrown exception, and if it was actually derived from the type named at the catch point, that will be a slicing copy, throwing away the fields of the derived type which might contain information it uses to provide a helpful
what()
message. Indeed, the virtualwhat()
function will resolve to the base class version, returning an empty string in the cases of the test apps.Ref: C++ Core Guidelines, E.15: Throw by value, catch exceptions from a hierarchy by reference.