Preguntando específicamente sobre el constructor predeterminado
Dado que el constructor inicializa todos los datos de un objeto, si creo una clase que no se puede usar sin una inicialización adecuada, ¿no es el caso que el constructor predeterminado sea inútil? Considerar:
// A class for handling lines in a CSV file
class CSV_Entry {
private:
unsigned num_entries;
std::string string_version;
std::vector<std::string> vector_version;
...etc
public:
CSV_Entry();
CSV_Entry(const std::string& src_line);
// returns a vector copy of the original entry
std::vector<std::string> get_vector_snapshot();
}
int main( void ) {
...etc
CSV_Entry example = CSV_Entry();
std::vector<std::string> current_entry = example.get_vector_snapshot();
...etc
}
Esa variable current_entry
es esencialmente inútil no? Si alguien trata de procesarlo más tarde, es probable que obtenga errores; entonces crearían código para manejar tales errores ...
Para mitigar dicho código adicional e innecesario: ¿por qué no hacer que el constructor predeterminado sea inutilizable? Al igual que,
...etc
CSV_Entry() {
throw Verbose_Exception( "CSV_Entry: do not use the default constructor" );
}
...etc
PD: en una nota al margen, si está bien simplemente dejar inutilizable el constructor predeterminado, ¿está bien poner ese lanzamiento en el encabezado, ya que de todos modos no se revelan otros detalles de implementación?
fuente
CSV_Entry() = delete;
.explicit
, por cierto). Entonces, si simplemente no lo define, no existirá.