懇親会の席上でおもろいネタで盛り上がってました:
「コンストラクタが例外を投げるのはアリか?」
僕は「ないわー」派についていたのですが、帰りの電車に揺られて酔いを醒ましてるうちに「アリかも」と思い始めてました。# かなはるちゃんいぢめてごめんよー
そもそも例外処理てぇのは
「エラーを検出できるが対処できない」呼ばれ側 と
「エラーに対処できるが検出できない」呼び側
との間でエラーをやり取りするためのからくり、なハズです。
するってーと例外ちゅーのは
"あり得ないこと"が起こった事を知らせるっちゅーより、
"対処不能なこと"が起こった事を知らせるもんだろ、と。
であるなら、コンストラクタ内で"対処不能なこと"が起こったのならその旨を呼び側に伝えるべく例外投げるのはアリかと思うですね。
※ かたやデストラクタで例外投げるのはどんなもんよ。
デストラクタは往々にして暗黙のうちに呼ばれるし、.NETだといつ呼ばれるかはおろか確実に呼ばれるかすら定かじゃない。んなもんcatchできひんやん。