Unterstützt C „finally“-Blöcke und was ist das RAII-Idiom?
Im Gegensatz zu anderen Sprachen unterstützt C „finally“ nicht explizit. Blöcke. Stattdessen wird das RAII-Idiom (Resource Acquisition Is Initialization) übernommen.
Das RAII-Idiom
RAII ist eine Technik, bei der der Destruktor eines Objekts für die Freigabe aller darin enthaltenen Ressourcen verantwortlich ist erwirbt. Dadurch wird sichergestellt, dass die Ressourcen bei der Objektzerstörung ordnungsgemäß freigegeben werden, unabhängig vom Exit-Pfad (einschließlich Ausnahmen).
Hier ist ein Beispiel für die Verwendung von RAII zum Sperren eines Mutex:
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 }
Hier Beispielsweise gibt der Destruktor für das „Lock“-Objekt den Mutex auch im Falle einer Ausnahme frei.
RAII vs. Die „using“-Anweisung von C#
Sowohl RAII als auch die „using“-Anweisung von C# sind darauf ausgelegt, eine deterministische Ressourcenfreigabe sicherzustellen. Der Hauptunterschied zwischen den beiden besteht darin, dass RAII für jeden Ressourcentyp, einschließlich Speicher, verwendet werden kann, während die .NET-Anweisung „using“ in erster Linie für die Freigabe von Nicht-Speicherressourcen gedacht ist.
Das obige ist der detaillierte Inhalt vonVerfügt C über ein „finally'-Blockäquivalent und wie erreicht RAII eine ähnliche Funktionalität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!