QScopeGuard Class

template <typename F> class QScopeGuard

スコープの最後で関数を呼び出すためのスコープガードを提供します。詳細...

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

パブリック関数

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

詳細説明

QScopeGuard<F> は、デストラクタで関数f を実行することだけを目的としたクラスです。これは、関数が正常に終了した場合でも、return文によって早期に終了した場合でも、例外によって終了した場合でも、クリーンアップ・コードが実行されることを保証するのに便利です。

注意: 例外はサポートされていません。callable は、実行時、コピー時、移動時に throw してはいけません。

QScopedValueRollbackも参照してください

メンバ関数のドキュメント

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

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

スコープの最後にf を実行するスコープガードを作成する。

Fがラムダの場合、その型を記述することはできません。その場合は、クラス・テンプレート引数控除(C++17 の機能)に頼ってテンプレート・パラメータを完全に省略するか、このコンストラクタの代わりにヘルパー関数qScopeGuard() を使用する必要があります。

[noexcept] void QScopeGuard::dismiss()

スコープ・ガードを解除して、関数Fがスコープの最後で呼び出されないようにします。

関連する非メンバー

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

qScopeGuard 関数を使用すると、スコープの最後で関数を呼び出すことができます。

スコープの最後でf を実行するスコープガードを作成します。

このヘルパー関数は、呼び出し可能な型のテンプレート・パラメータに名前をつけなくても、QScopeGuard を簡単に構築できるように提供されています。Fがラムダの場合、その型を書くことができないので、このヘルパーかクラスのテンプレート引数の推論に頼る必要があります。

使用例を以下に示します:

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;

    (...)
}

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。