在使用C++编写科学软件多年后,我仍然无法适应异常处理,也不知道何时应该使用它们。我知道在控制程序流方面使用它们是大忌,但除此之外...考虑以下示例(摘自表示图像掩模并允许用户将区域添加为多边形的类):
class ImageMask
{
public:
ImageMask() {}
ImageMask(const Size2DI &imgSize);
void addPolygon(const PolygonI &polygon);
protected:
Size2DI imgSize_;
std::vector<PolygonI> polygons_;
};
该类的默认构造函数会创建一个无用的实例,图像大小未定义。我不希望用户能够向这样的对象添加多边形。但我不确定该如何处理这种情况。当大小未定义并且调用addPolygon()时,我应该:
- 默默返回
- 断言(imgSize_.valid)以检测使用该类的代码中的违规,并在发布之前修复它们
- 抛出异常?