Secara khusus bertanya tentang konstruktor default
Mengingat konstruktor menginisialisasi semua data untuk objek, jika saya membuat kelas yang tidak dapat digunakan tanpa inisialisasi yang benar, bukankah konstruktor default tidak berguna? Mempertimbangkan:
// 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
}
Variabel current_entry
itu pada dasarnya tidak berguna, kan? Jika seseorang mencoba memprosesnya nanti, mereka kemungkinan akan mendapatkan kesalahan; maka mereka akan membuat kode untuk menangani kesalahan seperti itu ...
Untuk mengurangi kode tambahan yang tidak perlu seperti itu: mengapa tidak membuat konstruktor default tidak dapat digunakan? Seperti itu,
...etc
CSV_Entry() {
throw Verbose_Exception( "CSV_Entry: do not use the default constructor" );
}
...etc
PS: sebagai catatan, jika boleh saja membuat konstruktor default tidak dapat digunakan, apakah boleh memasukkan lemparan ke header, karena tidak ada detail implementasi lainnya yang terungkap?
sumber
CSV_Entry() = delete;
.explicit
, BTW). Jadi jika Anda tidak mendefinisikannya, itu tidak akan ada.