Después de muchos años de codificación de software científico en C++, todavía no puedo acostumbrarme a las excepciones y no tengo ni idea de cuándo debo usarlas. Sé que usarlos para controlar el flujo de programas es un gran no-no, pero aparte de eso ... considere el siguiente ejemplo (extracto de una clase que representa una máscara de imagen y permite al usuario agregar áreas como polígonos):No estoy seguro de cuándo usar excepciones en C++
class ImageMask
{
public:
ImageMask() {}
ImageMask(const Size2DI &imgSize);
void addPolygon(const PolygonI &polygon);
protected:
Size2DI imgSize_;
std::vector<PolygonI> polygons_;
};
El constructor predeterminado para esta clase crea una instancia inútil, con un tamaño de imagen indefinido. No quiero que el usuario pueda agregar polígonos a dicho objeto. Pero no estoy seguro de cómo manejar esa situación. Cuando el tamaño no está definido, y addPolygon() se llama, en caso de que:
- retorno En silencio,
- assert (imgSize_.valid) para detectar violaciónes de código usando esta clase y solucionarlos antes de un lanzamiento,
- , lanzar una excepcion?
La mayoría de las veces voy con 1) o 2) (dependiendo de mi estado de ánimo), porque me parece que las excepciones son costosas, desordenadas y simplemente excesivas para un escenario tan simple. ¿Alguna idea por favor?
¿Evitar la construcción predeterminada? Evita la creación de instancias 'ImageMask' inválidas. – hmjd
¿Por qué necesita un constructor predeterminado? –
Un constructor predeterminado puede ser útil para que pueda colocar objetos de ese tipo en ciertos contenedores. – MadScientist