C++ Weekly - Episode 150 脱水版: C++20's Lambda For Resources Management

37 阅读1分钟

C++ Weekly - Episode 150 脱水版: C++20's Lambda For Resources Management

C++20 Lambda 用于资源管理

Lambda 可以用于资源管理, 比如一下一个文件操作, 我们可以定义一个 lambda 表达式用于文件关闭的管理, 如下:

    auto deleter = [](FILE *f) { fclose(f); };
    auto file = std::unique_ptr<FILE, decltype(deleter)>(
        fopen("SomeFile.txt", "w"), deleter);

该代码块在 C++17 中可以正常编译.

在上一节中我们介绍过, C++ 支持默认构造以及支持未经求值的 lambda 表达式. 因此, 在 C++20 中, 我们可以这样:

    auto file = std::unique_ptr<FILE, decltype([](FILE *f) { fclose(f); })>(
        fopen("SomeFile.txt", "w"));

首先默认构造了一个 lambda 表达式, 然后 lambda 可以存在于未经求值的表达式中. 这也 C++ 的 RAII 技术的运用, 自动进行资源生命周期的管理.