- C++相談室 part125 [無断転載禁止]©2ch.net
932 :デフォルトの名無しさん (ワッチョイ 2a8b-GBh+)[sage]:2016/08/11(木) 08:07:02.61 ID:/EdBDLFJ0 - 質問ですが、
Q1. 例外をスローしても呼び出し元で解決できる見込みが無いレベルの事象が コンストラクタ内で生じたときどうするのが普通? プログラム全体の終了を意図するとして、std::terminate()とstd::abort()ではどっちが弊害が少ないんじゃろうか… もしくはより良い別の手段とかあればkwsk Q2. 汎用ライブラリの設計者が従うべき例外スローのガイドラインとかあったらkwsk (std::exception派生クラスのうちで、いつどの例外をスローすべきかとか
|
- C++相談室 part125 [無断転載禁止]©2ch.net
934 :デフォルトの名無しさん (ワッチョイ 2a8b-GBh+)[sage]:2016/08/11(木) 08:19:32.10 ID:/EdBDLFJ0 - >>933
質問は例外スロー前提ではない(例外をスローしても呼び出し元で解決できる見込みが無いレベルの事象)なのでよろ コンストラクタで例外をスローするときの挙動と基本的な作法は知ってるし、
|
- C++相談室 part125 [無断転載禁止]©2ch.net
935 :934 (ワッチョイ 2a8b-GBh+)[sage]:2016/08/11(木) 08:23:35.28 ID:/EdBDLFJ0 - 訂正;
誤: 質問は例外スロー前提ではない 正: Q1は必ずしも例外スロー前提ではない レスのために打鍵してくれたことには感謝してるチュ(はあと
|
- C++相談室 part125 [無断転載禁止]©2ch.net
938 :デフォルトの名無しさん (ワッチョイ 2a8b-GBh+)[sage]:2016/08/11(木) 09:00:42.10 ID:/EdBDLFJ0 - スマンQ1は質問の仕方がまずかったかもしれん…
あるクラスFooのコンストラクタで例外が生じたとき、後始末したがっているブツとしては (1) Fooの基底クラス (2) Fooの初期化済みメンバ (3) Foo::Foo()の呼び出し元、そのさらに呼び出し元… (4) atexit()系の関数で終了ハンドラを登録した実体 (5) set_unexpected()で例外ハンドラを登録した実体 というのが有り得ると思うので(他にまだあったりする?)、 コモンセンスなど有り得ない気がしてきた… (多分汎用ライブラリでは全部手当てすべき(理想)なんだけど、 特に(2)を完璧にやるにはFooの全メンバをstd::unique_ptr<T>化とか、 レアケースのためにありえない打鍵量を要求される(現実)ので、 どこまで救って何を切り捨てるのかもFooの設計のうちになりそう?
|