IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

QScopeGuard Class

Provides a scope guard for calling a function at the end of a scope.

This class was introduced in Qt 5.12.

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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

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:

 
Sélectionnez
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;

    (...)
}

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+