C は 'finally' ブロックをサポートしていますか? RAII イディオムとは何ですか?
他の言語とは異なり、C は明示的に 'finally' をサポートしていませんブロック。代わりに、RAII (Resource Acquisition Is Initialization) イディオムを採用します。
RAII イディオム
RAII は、オブジェクトのデストラクターがオブジェクトに含まれるリソースを解放する役割を担う手法です。を取得します。これにより、終了パス (例外を含む) に関係なく、オブジェクトの破棄時にリソースが適切に解放されることが保証されます。
RAII を使用してミューテックスをロックする例を次に示します。
class lock { public: lock(std::mutex& m) : m_(m) { m.lock(); } ~lock() { m_.unlock(); } std::mutex& m_; }; void foo() { lock scopeLock(mutex_); // Some operation that may throw an exception }
この例では、たとえば、「lock」オブジェクトのデストラクターは、たとえ例外。
RAII と C# の 'using' ステートメント
RAII と C# の 'using' ステートメントはどちらも、確実にリソースを解放するように設計されています。 2 つの主な違いは、RAII はメモリを含むあらゆる種類のリソースに使用できるのに対し、.NET の 'using' ステートメントは主に非メモリ リソースを解放することを目的としているという点です。
以上がC には「finally」ブロックと同等の機能がありますか? RAII はどのようにして同様の機能を実現しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。