QScopeGuard Class▲
-
Header: QScopeGuard
-
Since: Qt 5.12
-
CMake:
find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
-
qmake: QT += core
Detailed Description▲
QScopeGuard<F> is a class of which the sole purpose is to run the function f in its destructor. This is useful for guaranteeing your cleanup code is executed, whether the function is exited normally, exited early by a return statement, or exited by an exception.
Exceptions are not supported. The callable shouldn't throw when executed, copied or moved.
See Also▲
See also QScopedValueRollback
Member Function Documentation▲
[explicit, since 5.15] QScopeGuard::QScopeGuard(F &&f)▲
[explicit, since 5.15] QScopeGuard::QScopeGuard(const F &f)
Create a scope guard that will execute f at the end of the scope.
If F is a lambda, its type cannot be written. In that case you need to either rely on class template argument deduction (C++17 feature) and leave the template parameter out completely or use the helper function qScopeGuard() instead of this constructor.
This function was introduced in Qt 5.15.
void QScopeGuard::dismiss()▲
Disarms the scope guard, so that the function F will not be called at the end of the scope.
Related Non-Members▲
QScopeGuard<typename std::decay<F>::type> qScopeGuard(F &&f)▲
The qScopeGuard function can be used to call a function at the end of the scope.
Create a scope guard that will execute f at the end of the scope.
This helper function is provided so that you can easily construct a QScopeGuard without having to name the template parameter for the type of the callable. If F is a lambda then you cannot write its type and relying on this helper or class template argument deduction is necessary.
Example usage is as follows:
void
myComplexCodeWithMultipleReturnPoints(int
v)
{
// The lambda will be executed right before your function returns
auto
cleanup =
qScopeGuard([] {
code you want executed goes HERE; }
);
if
(v ==
-
1
)
return
;
int
v2 =
code_that_might_throw_exceptions();
if
(v2 ==
-
1
)
return
;
(...)
}