クラスのコンストラクタで異常を上位に返したい場合、例外を用いる以外に術はない。
こんな時は、C++例外クラスをthrowするのが良い。
もちろん例外送出時にはリソースを全て開放しておこう。
C++例外クラスで使えそうなものを上げておく。
いずれも任意の文字列を引数に取れるので、エラー内容を表す適切な英文を設定しておけば良いだろう。
std::exception
ベースとなる例外、以下どれにも属さない場合はこれを使おう
std::logic_error
論理的な事前条件を満たしていないことを表す
std::invalid_argument
引数エラー
logic_errorの子
std::domain_error
演算が定義されている領域の外側のデータが与えられた時に使う
logic_errorの子
std::length_error
長さの制限を超過している
logic_errorの子
std::out_of_range
範囲外の要素にアクセスしようとしている
logic_errorの子
std::runtime_error
簡単には予測できないエラー
んー、どういうこと?
std::range_error
値域エラー
計算結果が型の範囲内で表現できない時、例えばint型で結果がNanになった場合など
runtime_errorの子
std::overflow_error
算術オーバーフロー
まあ使うことはなさそうだ
runtime_errorの子
std::underflow_error
算術アンダーフロー
これも使うことはなさそう
runtime_errorの子