Poser des questions spécifiques sur le constructeur par défaut
Étant donné que le constructeur initialise toutes les données d'un objet, si je crée une classe qui ne peut pas être utilisée sans une bonne initialisation, n'est-il pas vrai que le constructeur par défaut est inutile? Considérer:
// 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
}
Cette variable current_entry
est essentiellement inutile non? Si quelqu'un essaie de le traiter plus tard, il obtiendrait probablement des erreurs; puis ils créeraient du code pour gérer ces erreurs ...
Pour atténuer ce code supplémentaire inutile: pourquoi ne pas rendre le constructeur par défaut inutilisable? Ainsi,
...etc
CSV_Entry() {
throw Verbose_Exception( "CSV_Entry: do not use the default constructor" );
}
...etc
PS: en passant, s'il est bien de rendre le constructeur par défaut inutilisable, est-ce bien de mettre ce lancer dans l'en-tête, car aucun autre détail d'implémentation n'est révélé de toute façon?
la source
CSV_Entry() = delete;
.explicit
, BTW). Donc, si vous ne le définissez pas, il n'existera pas.