12
例外の安全性のために「スコープ付きの動作」を取得する手段としてIDisposableおよび「using」を使用することは悪用ですか?
私がC ++でよく使用したのは、コンストラクターとデストラクターを使用して、AクラスBに別のクラスの状態の開始条件と終了条件を処理させ、Aそのスコープ内の何かが例外をスローした場合にBが既知の状態になるようにすることでした。スコープが終了しました。これは頭字語に関する限り、純粋なRAIIではありませんが、それでも確立されたパターンです。 C#では、よくやりたい class FrobbleManager { ... private void FiddleTheFrobble() { this.Frobble.Unlock(); Foo(); // Can throw this.Frobble.Fiddle(); // Can throw Bar(); // Can throw this.Frobble.Lock(); } } このようにする必要があります private void FiddleTheFrobble() { this.Frobble.Unlock(); try { Foo(); // Can throw this.Frobble.Fiddle(); // Can throw Bar(); // Can throw } finally { …
112
c#
exception-handling
raii