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 技术的运用, 自动进行资源生命周期的管理.