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

|