Actualmente estoy a cargo de encontrar todas las malas prácticas en nuestra base de códigos y convencer a mis colegas para corregir el código ofensivo. Durante mi espeleología, he notado que muchas personas aquí utilizan el siguiente patrón:Argumentos en contra del método "initialize()" en lugar de los constructores
class Foo
{
public:
Foo() { /* Do nothing here */ }
bool initialize() { /* Do all the initialization stuff and return true on success. */ }
~Foo() { /* Do all the cleanup */ }
};
Ahora puedo estar equivocado, pero para mí esta cosa initialize()
método es horrible. Creo que cancela todo el propósito de tener constructores.
Cuando pregunto a mis colegas por qué se tomó esta decisión de diseño, siempre responder que no tienen otra opción porque no se puede salir de un constructor sin lanzar (supongo que asumen que lanza es siempre malo).
No logré convencerlos hasta el momento y admito que puedo carecer de argumentos valiosos ... así que aquí está mi pregunta: ¿Tengo razón en que este constructo es un dolor? Si es así, ¿qué problemas ves en él? ?
Gracias.
FTR, esto se conoce como la inicialización de dos fases. –
aquí hay una pregunta obvia: si la construcción falla, * ¿qué quieren hacer sus compañeros de trabajo con el objeto construido a medio camino *? Es inutil. Bien podría haber arrojado una excepción en la construcción – jalf
@jalf: Buen punto de hecho. – ereOn