Va bene rendere inutilizzabile un costruttore predefinito?

14

In particolare per chiedere 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 un'inizializzazione corretta, non è il caso che il costruttore predefinito sia inutile? Prendere in considerazione:

// 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 otterrà degli errori; quindi avrebbero creato il codice per gestire tali errori ...

Per attenuare questo codice aggiuntivo non necessario: perché non rendere inutilizzabile il costruttore predefinito? Mi piace così,

...etc

CSV_Entry() {
    throw Verbose_Exception( "CSV_Entry: do not use the default constructor" );
}

...etc

PS: su una nota a margine, se va bene solo rendere il costruttore predefinito inutilizzabile, va bene mettere quell'arma nell'intestazione, dato che nessun altro dettaglio di implementazione viene rivelato comunque?

    
posta user2738698 26.03.2014 - 18:55
fonte

1 risposta

33

Sì, va bene (in realtà, è buono ) rendere inutilizzabile il costruttore predefinito se non esiste un modo sensato per inizializzare l'oggetto senza argomenti. Ma non "disabilitarlo" generando un'eccezione. Rendilo privato. Idealmente la tua interfaccia non conterrà metodi o costruttori che le persone "non dovrebbero" chiamare.

    
risposta data 26.03.2014 - 19:03
fonte