In particolare chiedendo informazioni sul costruttore predefinito
Dato che il costruttore inizializza tutti i dati per un oggetto, se creo una classe che non può essere utilizzata senza una corretta inizializzazione, non è il caso che il costruttore predefinito sia inutile? Ritenere:
// 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
}
Quella variabile current_entry
è essenzialmente inutile no? Se qualcuno tenta di elaborarlo in un secondo momento, probabilmente otterrebbero errori; quindi avrebbero creato il codice per gestire tali errori ...
Per mitigare tale codice aggiuntivo e non necessario: perché non rendere inutilizzabile il costruttore predefinito? Così,
...etc
CSV_Entry() {
throw Verbose_Exception( "CSV_Entry: do not use the default constructor" );
}
...etc
PS: una nota a margine, se va bene rendere inutilizzabile il costruttore predefinito, va bene mettere quel lancio nell'intestazione, dal momento che nessun altro dettaglio di implementazione viene rivelato comunque?