Entry

例外安全への対応としてスマートポインタは有効か

2011年11月25日

C++ で例外安全と言えば「スマートポインタ使おう!」のように,判で押したような答えが返ってくるんだけれども,これはどうなんだろうと思う。そもそも,例外なんか使うもんじゃないとかいった話もあるんだけれども,うまく使えない子は使わない方がいいと思う。

例外安全の例に出されるコードを見ていていつも思うんだけれども,まず,リソースを管理する手法にポリシーがない。分かりやすさのためなんだろうけれど,いきなり何も管理されていないポインタにヒープのメモリを割り当てるアホは普通いない。そゆのは,auto_ptr/unique_ptr や shared_ptr なんかを使っても,いずれリークするプログラムを作ると思う。

また,例えば,複数で一組のリソースがある場合で生成-破棄に順番がある場合や,組み合わせによって管理する手続きが変わる場合なんかにおいて,通常のスマートポインタで管理すると却って面倒になる。リソースは,プログラマが管理方針を自分で作る必要があるわけで,通常はそれらをクラスで管理し,リソースの生成-破棄に対する責任は原則としてそのオブジェクトが負う。つまり,一般的にリソースに対する管理ポリシーは,スマートポインタだけで構成できるもんではないとゆこと。当たり前だけど。

あと,例外安全をことさら云々する人は,正常系と異常系をそもそも切り分けられていないようにも思う。正常系と異常系を切り分けられないなら,それに対する管理方針を立てられないのも,ま,当たり前だと思う。

例外安全とゆ言葉はあってもいいと思うんだけれども,なんだか強調されすぎな感じ。そゆ人は,シグナル安全とか割り込み安全とかいった言葉(ここで作った言葉)にも過剰反応しそう。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN