QScopeGuard 类

template <typename F> class QScopeGuard

提供一种在作用域末尾调用函数的作用域保护器。 更多...

头文件 #include <QScopeGuard>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

公共函数

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

详细描述

QScopeGuard<F> 是一个类,它的唯一目的是在其析构函数中运行函数 f。这对于确保您的清理代码是否执行、函数是否正常退出、由于返回语句提前退出或由于异常退出非常有用。

注意: 不支持异常。可调用项在执行、复制或移动时不应抛出。

另请参见:QScopedValueRollback

成员函数文档

[显式 noexcept] QScopeGuard::QScopeGuard(F &&f)

[显式 noexcept] QScopeGuard::QScopeGuard(const F &f)

创建一个作用域保护器,在该作用域结束时执行 f

如果 F 是一个 lambda,它的类型无法编写。在这种情况下,您可以通过依赖于类模板参数推导(C++17 特性)并完全不使用模板参数或使用辅助函数 qScopeGuard() 而不是此构造函数。

[noexcept] void QScopeGuard::dismiss()

解除作用域保护器的武装,这样就不会在作用域结束时调用函数 F

相关非成员

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

qScopeGuard 函数可用于在作用域结束时调用函数。

创建一个作用域保护器,在该作用域结束时执行 f

此辅助函数提供,以便您无需指定可调用类型的模板参数即可轻松构建QScopeGuard。如果F是lambda函数,则无法编写其类型,因此需要依赖此辅助函数或类模板参数推导。

示例用法如下:

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 Qt公司。本文件中的文档贡献者是各自所有者的版权。本文件提供的文档根据免费软件基金会发布的GNU自由文档许可协议版本1.3许可。