Sur cette page

QScopeGuard Class

template <typename F> class QScopeGuard

Fournit une protection de portée permettant d'appeler une fonction à la fin d'une portée. En savoir plus...

En-tête : #include <QScopeGuard>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core

Fonctions publiques

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

Description détaillée

QScopeGuard<F> est une classe de modèle où F est le type d'un élément appelable (tel qu'un pointeur de fonction, un foncteur ou un lambda) qui sera invoqué dans le destructeur. Cela est utile pour garantir l'exécution de votre code de nettoyage, que la fonction se termine normalement, qu'elle soit interrompue prématurément par une instruction return ou qu'elle se termine par une exception.

Un garde de portée peut être désactivé à l'aide de ` dismiss()` ; dans ce cas, la fonction n'est pas exécutée du tout, ou bien elle est exécutée avant la destruction, à l'aide de ` commit()`.

Remarque : les exceptions ne sont pas prises en charge. L’objet appelable ne doit pas lever d’exception lors de son exécution, de sa copie ou de son déplacement.

Voir également QScopedValueRollback.

Documentation sur les fonctions membres

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

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

Crée un garde de portée qui exécutera ` f ` à la fin de la portée.

Si F est un lambda, son type ne peut pas être écrit. Dans ce cas, vous devez soit vous appuyer sur la déduction des arguments de modèle de classe (fonctionnalité C++17) et omettre complètement le paramètre de modèle, soit utiliser la fonction d’aide qScopeGuard() à la place de ce constructeur.

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

Appelle la fonction F, puis désactive le garde de portée. Le garde doit être activé (ne pas avoir été appelé par ` dismiss()`) lors de l'appel de cette fonction.

Cette fonction a été introduite dans Qt 6.11.

Remarque : cette fonction est de type « noexcept » lorsque std::is_nothrow_invocable_v<F> est de type « true ».

Voir également dismiss().

[noexcept] void QScopeGuard::dismiss()

Désactive la protection de portée, de sorte que la fonction F ne soit pas appelée à la fin de la portée.

Voir également commit().

Éléments non membres associés

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

La fonction qScopeGuard permet d'appeler une fonction à la fin de la portée.

Créez un garde de portée qui exécutera f à la fin de la portée.

Cette fonction d'aide est fournie pour vous permettre de construire facilement une expression « QScopeGuard » sans avoir à nommer le paramètre de modèle correspondant au type de l'objet appelable. Si F est un lambda, vous ne pouvez pas écrire son type ; il est alors nécessaire de s'appuyer sur cette fonction d'aide ou sur la déduction des arguments du modèle de classe.

Voici un exemple d’utilisation :

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.