何年にもわたって C++ で科学的ソフトウェアのコーディングを行ってきましたが、いまだに例外に慣れていないようで、例外をいつ使用すればよいかわかりません。プログラムフローを制御するためにそれらを使用することは大したことではありませんが、それ以外の場合は...次の例を検討してください(イメージマスクを表し、ユーザーが領域をポリゴンとして追加できるようにするクラスからの抜粋):
class ImageMask
{
public:
ImageMask() {}
ImageMask(const Size2DI &imgSize);
void addPolygon(const PolygonI &polygon);
protected:
Size2DI imgSize_;
std::vector<PolygonI> polygons_;
};
このクラスのデフォルトのコンストラクターは、画像サイズが定義されていない、役に立たないインスタンスを作成します。ユーザーがそのようなオブジェクトにポリゴンを追加できるようにしたくありません。しかし、私はその状況をどのように処理するかわかりません。サイズが未定義で、addPolygon() が呼び出された場合、次のことを行う必要があります。
- 黙って帰って、
- assert(imgSize_.valid) は、このクラスを使用してコードの違反を検出し、リリース前に修正します。
- 例外をスローしますか?
ほとんどの場合、私は 1) または 2) のいずれかを使用します (気分によって異なります)。なぜなら、このような単純なシナリオでは、例外はコストがかかり、面倒で、単純にやり過ぎのように思われるからです。いくつかの洞察をお願いします。