C での標準 Defer/Finalizer 実装とは何ですか?
Go からインスピレーションを得た「defer」関数の概念により、遅延現在のスコープが終了した後に、指定されたタスクを実行します。これにより、リソースのクリーンアップ、ロギング、またはコード内の特定のポイントに到達したときにトリガーされる必要があるその他のアクションが可能になります。
STL およびブーストの実装
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>
Example
次のコードを考えてみましょう:
<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 中国語 Web サイトの他の関連記事を参照してください。