En esta página

QScopeGuard Class

template <typename F> class QScopeGuard

Proporciona una protección de ámbito para llamar a una función al final de un ámbito. Más...

Cabecera: #include <QScopeGuard>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Funciones públicas

QScopeGuard(F &&f)
QScopeGuard(const F &f)
(since 6.11) void commit()
void dismiss()
QScopeGuard<typename std::decay<F>::type> qScopeGuard(F &&f)

Descripción detallada

QScopeGuard<F> es una clase cuyo único propósito es ejecutar la función f en su destructor. Esto es útil para garantizar que su código de limpieza se ejecuta, tanto si la función se sale normalmente, se sale antes de tiempo por una sentencia return, o se sale por una excepción.

Se puede desactivar una protección de ámbito usando dismiss(), en cuyo caso la función no se ejecuta en absoluto, o ejecutarse antes de la destrucción, usando commit().

Nota: No se admiten excepciones. El callable no debería lanzar cuando se ejecuta, copia o mueve.

Véase también QScopedValueRollback.

Documentación de funciones miembro

[explicit noexcept] QScopeGuard::QScopeGuard(F &&f)

[explicit noexcept] QScopeGuard::QScopeGuard(const F &f)

Crea una guarda de ámbito que ejecutará f al final del ámbito.

Si F es una lambda, su tipo no puede escribirse. En ese caso necesitas confiar en la deducción de argumentos de la plantilla de la clase (característica de C++17) y dejar el parámetro de la plantilla fuera completamente o usar la función de ayuda qScopeGuard() en lugar de este constructor.

[noexcept(...), since 6.11] void QScopeGuard::commit()

Llama a la función F y desarma la protección del visor. La protección debe estar armada (no debe haber sido dismiss()ed) cuando se llama a esta función.

Esta función se introdujo en Qt 6.11.

Nota: Esta función es noexcept cuando std::is_nothrow_invocable_v<F> es true.

Ver también dismiss().

[noexcept] void QScopeGuard::dismiss()

Desactiva la protección del ámbito, para que la función F no sea llamada al final del ámbito.

Véase también commit().

No miembros relacionados

template <typename F> QScopeGuard<typename std::decay<F>::type> qScopeGuard(F &&f)

La función qScopeGuard puede utilizarse para llamar a una función al final del ámbito.

Crea un scope guard que ejecutará f al final del ámbito.

Esta función de ayuda se proporciona para que pueda construir fácilmente un QScopeGuard sin tener que nombrar el parámetro de plantilla para el tipo de la llamada. Si F es una lambda entonces no puedes escribir su tipo y es necesario confiar en este ayudante o en la deducción del argumento de la plantilla de la clase.

Un ejemplo de uso es el siguiente:

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;

    //...
}

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.