Конкретно запитаючи про конструктор за замовчуванням
З огляду на те, що конструктор ініціалізує всі дані для об'єкта, якщо я створю клас, який неможливо використовувати без належної ініціалізації, чи не так, що конструктор за замовчуванням марний? Поміркуйте:
// 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
}
Ця змінна current_entry
по суті марно ні? Якщо хтось спробує це згодом обробити, він, ймовірно, отримає помилки; то вони б створили код для обробки таких помилок ...
Щоб пом'якшити такий додатковий, непотрібний код: чому б не зробити конструктор за замовчуванням непридатним? Так,
...etc
CSV_Entry() {
throw Verbose_Exception( "CSV_Entry: do not use the default constructor" );
}
...etc
PS: на стороні примітки, якщо добре просто зробити конструктор за замовчуванням непридатним, чи добре розмістити цей закид у заголовку, оскільки ніяких інших деталей щодо реалізації все одно не виявлено?