// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Sérgio Martins // Copyright (C) 2019 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only #include "qscopeguard.h" QT_BEGIN_NAMESPACE /*! \class QScopeGuard \since 5.12 \inmodule QtCore \brief Provides a scope guard for calling a function at the end of a scope. QScopeGuard is a class of which the sole purpose is to run the function \a 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. \sa QScopedValueRollback */ /*! \fn template QScopeGuard::QScopeGuard(F &&f) \fn template QScopeGuard::QScopeGuard(const F &f) Create a scope guard that will execute \a f at the end of the scope. If \e 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. \since 5.15 */ /*! \fn template void QScopeGuard::dismiss() Disarms the scope guard, so that the function \e F will not be called at the end of the scope. */ /*! \fn [qScopeGuard] template QScopeGuard::type> qScopeGuard(F &&f) \inmodule QtCore \relates QScopeGuard \brief The qScopeGuard function can be used to call a function at the end of the scope. \ingroup misc Create a scope guard that will execute \a 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 \e 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: \snippet code/src_corelib_tools_qscopeguard.cpp 0 */ QT_END_NAMESPACE