C++で長年にわたり科学ソフトウェアをコーディングしても、私はまだ例外に慣れていないようで、いつ使用するべきかわかりません。私は、プログラムの流れを制御するためにそれらを使用することは大きなノーではないことを知っていますが、以下の例を考えてみましょう(画像マスクを表すクラスから抜粋し、ユーザーがポリゴンとして領域を追加できるようにします):C++で例外を使用するかどうかわからない
class ImageMask
{
public:
ImageMask() {}
ImageMask(const Size2DI &imgSize);
void addPolygon(const PolygonI &polygon);
protected:
Size2DI imgSize_;
std::vector<PolygonI> polygons_;
};
このクラスのデフォルトコンストラクタは、イメージサイズが定義されていない無駄なインスタンスを作成します。ユーザーがそのようなオブジェクトにポリゴンを追加できるようにする必要はありません。しかし、私はそのような状況をどのように処理するかは分かりません。サイズは未定義であり、addPolygon()が呼び出されると、すべきI:
- サイレント・リターン、 このクラスを使用してコードに違反を検出し、リリース前にそれらを修正する
- のassert(imgSize_.valid)、
- 例外をスローしますか?
ほとんどの場合、私の気分に応じて1)または2)のいずれかに行きます。私には例外がありますが、そのような単純なシナリオでは例外が高価で扱いにくく過度です。いくつかの洞察をお願いしますか?
デフォルトの構成を防止しますか?無効な 'ImageMask'インスタンスが作成されないようにします。 – hmjd
なぜデフォルトコンストラクタが必要ですか? –
デフォルトコンストラクタは、その型のオブジェクトを特定のコンテナに入れることができるように便利です。 – MadScientist