- C++相談室 part122 [無断転載禁止]©2ch.net
92 :デフォルトの名無しさん[sage]:2016/01/26(火) 22:52:14.01 ID:IXu06oBB - C++ではインスタンスxのコンストラクタ内で例外が発生した場合、
xのデストラクタは呼ばれない(理由は>>91の通り という言語仕様なのは真実なので、逃げ手としてnewに細工がしてあるだけの話 生のハンドルとかはこれそのものでは救えない。 コンストラクタで生のハンドルを確保するコードを普通に書いたら、コンストラクタが例外を生じたときにリークする それを避けるための正しいテクニックは、 1) きちんとハンドル(リソース)のwrapperを書いて、 2) そいつをxのメンバにしとく である(メンバのデストラクタは、xのコンストラクタが例外を生じても呼ばれる んまー常識的には「コンストラクタで例外を発生させない」とか「例外が発生したら諦める」設計のが 特殊な用途以外では普通な希ガス、
|