Auf dieser Seite

QScopeGuard Class

template <typename F> class QScopeGuard

Bietet einen Scope Guard für den Aufruf einer Funktion am Ende eines Scopes. Mehr...

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

Öffentliche Funktionen

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

Detaillierte Beschreibung

QScopeGuard<F> ist eine Klasse, deren einziger Zweck es ist, die Funktion f in ihrem Destruktor auszuführen. Dies ist nützlich, um zu garantieren, dass Ihr Aufräumcode ausgeführt wird, unabhängig davon, ob die Funktion normal, vorzeitig durch eine Return-Anweisung oder durch eine Exception beendet wird.

Ein Scope Guard kann mit dismiss() deaktiviert werden, in diesem Fall wird die Funktion überhaupt nicht ausgeführt, oder mit commit() vor der Zerstörung ausgeführt.

Hinweis: Ausnahmen werden nicht unterstützt. Die aufrufbare Funktion sollte nicht auslösen, wenn sie ausgeführt, kopiert oder verschoben wird.

Siehe auch QScopedValueRollback.

Dokumentation der Mitgliedsfunktionen

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

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

Erzeugt eine Bereichsüberwachung, die f am Ende des Bereichs ausführt.

Wenn F ein Lambda ist, kann sein Typ nicht geschrieben werden. In diesem Fall müssen Sie sich entweder auf die Deduktion von Klassenvorlagenargumenten verlassen (C++17-Funktion) und den Vorlagenparameter vollständig weglassen oder die Hilfsfunktion qScopeGuard() anstelle dieses Konstruktors verwenden.

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

Ruft die Funktion F auf und entschärft dann den Wächter des Bereichs. Der Guard muss aktiviert sein (nicht dismiss()ed), wenn diese Funktion aufgerufen wird.

Diese Funktion wurde in Qt 6.11 eingeführt.

Hinweis: Diese Funktion ist noexcept, wenn std::is_nothrow_invocable_v<F> true ist.

Siehe auch dismiss().

[noexcept] void QScopeGuard::dismiss()

Deaktiviert die Bereichsüberwachung, so dass die Funktion F am Ende des Bereichs nicht aufgerufen wird.

Siehe auch commit().

Verwandte Nicht-Mitglieder

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

Die Funktion qScopeGuard kann verwendet werden, um eine Funktion am Ende des Bereichs aufzurufen.

Erstellen Sie einen Scope Guard, der f am Ende des Scopes ausführt.

Diese Hilfsfunktion wird zur Verfügung gestellt, damit Sie eine QScopeGuard einfach konstruieren können, ohne den Template-Parameter für den Typ der aufrufbaren Funktion benennen zu müssen. Wenn F ein Lambda ist, können Sie seinen Typ nicht schreiben und müssen sich auf diese Hilfsfunktion oder die Ableitung des Klassenvorlagenarguments verlassen.

Ein Beispiel für die Verwendung ist wie folgt:

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.