使用時にキャッチしたい例外をスローする可能性のある関数を含むクラスを構築したいと考えています。標準の例外クラスから my_exception を継承します。what() 関数を実装して、プライベート文字列変数に格納されている文字列を返すようにします
ios_base::failure を使用して iostream ライブラリで行われているように、例外をネストされたクラスとして定義する方がよいと思います。
あまり確信が持てないのは、my_expetion のオブジェクトをどこでどのように定義する必要があるかです。iostream 関数の内部コードを見て、それがどのように行われたかを確認できればと思います。私はいくつかのオプションについて考えました:
例外の理由ごとに、文字列を取得してプライベート文字列ポインターに保存するコンストラクターを使用して、my_exception の静的インスタンスを定義できます。
例外の理由ごとに、my_exception から継承する別のクラスを定義し、定数文字列 (理由) を返す関数として what を実装できます。その例外サブクラスのそれぞれのインスタンスを保持したり、型をスローしたりできます。ところで、通常、インスタンスではなくタイプをスローするのはいつですか?
私はそれが間違っていると思います: 例外をスローしたいたびに、文字列を取得するコンストラクターで新しい my_exception を作成します。これは Java で行われますが、例外をどこかで削除する必要があるため、C++ では問題になると理解しています。右?
1枚目が正しいと思いますよね?これ以上の標準オプションはありますか?
どうもありがとうございました!