Speziell nach dem Standardkonstruktor fragen
Wenn der Konstruktor alle Daten für ein Objekt initialisiert und eine Klasse erstellt, die ohne ordnungsgemäße Initialisierung nicht verwendet werden kann, ist der Standardkonstruktor dann nicht nutzlos? Erwägen:
// 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
}
Diese Variable current_entry
ist im Wesentlichen nutzlos, nein? Wenn jemand später versucht, es zu verarbeiten, wird er wahrscheinlich Fehler bekommen. dann würden sie Code erstellen, um solche Fehler zu behandeln ...
So verringern Sie diesen zusätzlichen, unnötigen Code: Machen Sie den Standardkonstruktor nicht unbrauchbar. Wie so
...etc
CSV_Entry() {
throw Verbose_Exception( "CSV_Entry: do not use the default constructor" );
}
...etc
PS: Wenn es in Ordnung ist, nur den Standardkonstruktor unbrauchbar zu machen, ist es in Ordnung, diesen Throw in den Header zu setzen, da ohnehin keine anderen Implementierungsdetails enthüllt werden?
quelle
CSV_Entry() = delete;
.explicit
). Also, wenn Sie es einfach nicht definieren, wird es nicht existieren.