Perguntando especificamente sobre o construtor padrão
Dado que o construtor inicializa todos os dados de um objeto, se eu criar uma classe que não pode ser usada sem a inicialização adequada, não é o caso de o construtor padrão ser 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
}
Essa variável current_entry
é essencialmente inútil, não? Se alguém tentar processá-lo mais tarde, provavelmente obterá erros; então eles criavam código para lidar com esses erros ...
Para mitigar esse código adicional desnecessário: por que não tornar o construtor padrão inutilizável? Igual a,
...etc
CSV_Entry() {
throw Verbose_Exception( "CSV_Entry: do not use the default constructor" );
}
...etc
PS: em uma nota lateral, se é bom apenas inutilizar o construtor padrão, é bom colocar esse lance no cabeçalho, pois nenhum outro detalhe da implementação é revelado?
fonte
CSV_Entry() = delete;
.explicit
, BTW). Portanto, se você simplesmente não o definir, ele não existirá.