QScopeGuard Class
template <typename F> class QScopeGuardBietet einen Bereichsschutz für den Aufruf einer Funktion am Ende eines Gültigkeitsbereichs. Mehr...
| Header: | #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() |
Zugehörige Nicht-Mitglieder
| QScopeGuard<typename std::decay<F>::type> | qScopeGuard(F &&f) |
Ausführliche Beschreibung
QScopeGuard<F> ist eine Template-Klasse, wobei ` F ` der Typ eines aufrufbaren Objekts (z. B. eines Funktionszeigers, eines Funktors oder eines Lambda-Ausdrucks) ist, das im Destruktor aufgerufen wird. Dies ist nützlich, um sicherzustellen, dass Ihr Aufräumcode ausgeführt wird, unabhängig davon, ob die Funktion normal beendet wird, vorzeitig durch eine return-Anweisung beendet wird oder durch eine Ausnahme beendet wird.
Ein Scope Guard kann mit ` dismiss()` deaktiviert werden; in diesem Fall wird die Funktion überhaupt nicht ausgeführt. Alternativ kann sie mit ` commit()` vor der Zerstörung ausgeführt werden.
Hinweis: Ausnahmen werden nicht unterstützt. Das aufrufbare Objekt sollte bei der Ausführung, beim Kopieren oder beim Verschieben keine Ausnahme auslösen.
Siehe auch QScopedValueRollback.
Dokumentation zu Mitgliedsfunktionen
[explicit noexcept] QScopeGuard::QScopeGuard(F &&f)
[explicit noexcept] QScopeGuard::QScopeGuard(const F &f)
Erstellt einen Scope-Guard, der am Ende des Gültigkeitsbereichs „ f “ ausführt.
Wenn F ein Lambda ist, kann dessen Typ nicht angegeben werden. In diesem Fall müssen Sie entweder auf die Ableitung von Klassenvorlagenargumenten (C++17-Feature) zurückgreifen und den Vorlagenparameter vollständig weglassen oder anstelle dieses Konstruktors die Hilfsfunktion ` qScopeGuard()` verwenden.
[noexcept(...), since 6.11] void QScopeGuard::commit()
Ruft die Funktion F auf und deaktiviert anschließend den Scope-Guard. Der Guard muss beim Aufruf dieser Funktion aktiviert sein (d. h., es darf kein „ dismiss()“ erfolgt sein).
Diese Funktion wurde in Qt 6.11 eingeführt.
Hinweis: Diese Funktion ist „noexcept“, wenn „ std::is_nothrow_invocable_v<F> “ auf „ true “ gesetzt ist.
Siehe auch „ dismiss()“.
[noexcept] void QScopeGuard::dismiss()
Deaktiviert den Scope-Guard, sodass die Funktion F am Ende des Gültigkeitsbereichs nicht aufgerufen wird.
Siehe auch commit().
Verwandte Nicht-Mitglieder
template <typename F> QScopeGuard<typename std::decay<F>::type> qScopeGuard(F &&f)
Mit der Funktion „qScopeGuard“ kann am Ende des Gültigkeitsbereichs eine Funktion aufgerufen werden.
Erstellen Sie einen Scope-Guard, der am Ende des Gültigkeitsbereichs „ f “ ausführt.
Diese Hilfsfunktion wird bereitgestellt, damit Sie problemlos einen „ QScopeGuard “ erstellen können, ohne den Template-Parameter für den Typ des Aufrufbaren benennen zu müssen. Wenn F ein Lambda ist, können Sie dessen Typ nicht angeben, sodass Sie auf diese Hilfsfunktion oder die Ableitung von Klassen-Template-Argumenten zurückgreifen müssen.
Ein Anwendungsbeispiel sieht wie folgt aus:
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.