什么是 C 语言中的标准 Defer/Finalizer 实现?
受 Go 启发,“延迟”函数的概念允许延迟当前作用域退出后执行指定任务。这允许在到达代码中的特定点时触发资源清理、日志记录或其他操作。
STL 和 Boost 实现
C 标准库 (STL) 和 Boost 库不提供延迟类的内置实现。但是,有一些第三方库可以解决此功能。
自定义延迟实现
如果无法选择外部库,则可以使用以下自定义实现模拟延迟功能:
<code class="cpp">struct defer_dummy {}; template <class F> struct deferrer { F f; ~deferrer() { f(); } }; template <class F> deferrer<F> operator*(defer_dummy, F f) { return {f}; } #define DEFER_(LINE) zz_defer##LINE #define DEFER(LINE) DEFER_(LINE) #define defer auto DEFER(__LINE__) = defer_dummy{} *[&]()</code>
用法
要使用此实现,只需编写:
<code class="cpp">defer { statements; };</code>
示例
考虑以下代码:
<code class="cpp">#include <cstdio> #include <cstdlib> defer { std::fclose(file); }; // don't need to write an RAII file wrapper. // File reading code... return 0;</code>
在此示例中,defer 块确保文件关闭,无论函数是否成功返回。
以上是如何在 C 中实现延迟功能?的详细内容。更多信息请关注PHP中文网其他相关文章!