QScopeGuard Class
template <typename F> class QScopeGuardProvides a scope guard for calling a function at the end of a scope. More...
| Header: | #include <QScopeGuard> | 
| qmake: | QT += core | 
| Since: | Qt 5.12 | 
This class was introduced in Qt 5.12.
Public Functions
| QScopeGuard(const F &f) | |
| QScopeGuard(F &&f) | |
| void | dismiss() | 
Related Non-Members
| QScopeGuard<typename std::decay<F>::type> | qScopeGuard(F &&f) | 
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.
Note: Exceptions are not supported. The callable shouldn't throw when executed, copied or moved.
See also QScopedValueRollback.
Member Function Documentation
QScopeGuard::QScopeGuard(F &&f)
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
template <typename F> 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;
    (...)
}  
    © The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
    https://doc.qt.io/qt-5.15/qscopeguard.html