QScopeGuard Class

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

Header: #include <QScopeGuard>
qmake: QT += core
Since: Qt 5.12

Public Functions

QScopeGuard(QScopeGuard<F> &&other)
~QScopeGuard()
void dismiss()
QScopeGuard<F> qScopeGuard(F f)

Detailed Description

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

Member Function Documentation

QScopeGuard::QScopeGuard(QScopeGuard<F> &&other)

Default constructs an instance of QScopeGuard.

QScopeGuard::~QScopeGuard()

Destroys the instance of QScopeGuard.

void QScopeGuard::dismiss()

Related Non-Members

QScopeGuard<F> qScopeGuard(F f)

The qScopeGuard function can be used to call a function at the end of the scope.

QScopeGuard<F> is a class which sole purpose is to run a 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.

If F is a lambda then you cannot instantiate the template directly, therefore the qScopeGuard() helper is provided and QScopeGuard<F> is made a private implementation detail.

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_through_exceptions();

      if (v2 == -1)
          return;

      (...)
  }

Note: Exceptions are not supported. The callable shouldn't throw when executed, copied or moved.

See also QScopedValueRollback.