閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

ScopeGuard

10月8日の日記でも少し触れたイディオム (RAII) をスマートに実現している。前に自分が書いたようなやり方だと、「関数もしくはブロックを抜ける際に行いたい処理をデストラクタに記述したクラス」(長い……)を必要に応じてその都度定義しなければならないわけですが、リンク先の記事にあるようなやり方を使えば ScopeGuard に最初に終了時に行いたい処理を登録しておけばそれで済んでしまうと言う。思いつきもしなかったよ……。

リンクした記事は、例外安全についての記事で、例外安全をうまいこと実装するのに ScopeGuard を使っている。こういうコードを何も考えずに書けるようにならないと駄目なんでしょうね。 Solution 3 に挙げられているアプローチは現実的でつい選びたくなってしまうけれど、そんなことじゃあいつか食い扶持が無くなってしまうのだ……。