libcamera
v0.4.0
Supporting cameras in Linux since 2019
|
An object that performs actions upon destruction. More...
Public Member Functions | |
void | operator+= (std::function< void()> &&action) |
Add an exit action. More... | |
void | release () |
Remove all exit actions. More... | |
An object that performs actions upon destruction.
The ScopeExitActions class is a simple object that performs user-provided actions upon destruction. It is meant to simplify cleanup tasks in error handling paths.
When the code flow performs multiple sequential actions that each need a corresponding cleanup action, error handling quickly become tedious:
This is prone to programming mistakes, as cleanup actions can easily be forgotten or ordered incorrectly. One strategy to simplify error handling is to use goto statements:
While this may be considered better, this solution is still quite error-prone. Beside the risk of picking the wrong error label, the error handling logic is separated from the normal code flow, which increases the risk of error when refactoring the code. Additionally, C++ doesn't allow goto statements to jump over local variable declarations, which can make usage of this pattern more difficult.
The ScopeExitActions class solves these issues by allowing code that requires cleanup actions to be grouped with its corresponding error handling code:
Error handlers are executed when the ScopeExitActions instance is destroyed, in the reverse order of their addition.
void libcamera::utils::ScopeExitActions::operator+= | ( | std::function< void()> && | action | ) |
Add an exit action.
[in] | action | The action |
Add an exit action to the ScopeExitActions. Actions will be called upon destruction in the reverse order of their addition.
void libcamera::utils::ScopeExitActions::release | ( | ) |
Remove all exit actions.
This function should be called in scope exit paths that don't need the actions to be executed, such as success return paths from a function when the ScopeExitActions is used for error cleanup.