Hỏi cụ thể về hàm tạo mặc định
Cho rằng hàm tạo khởi tạo tất cả dữ liệu cho một đối tượng, nếu tôi tạo một lớp không thể được sử dụng mà không khởi tạo đúng, thì đó không phải là trường hợp hàm tạo mặc định là vô dụng? Xem xét:
// 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
}
Biến đó current_entry
thực chất là vô dụng phải không? Nếu ai đó cố gắng xử lý nó sau này, họ có thể sẽ gặp lỗi; sau đó họ sẽ tạo mã để xử lý các lỗi đó ...
Để giảm thiểu mã bổ sung, không cần thiết như vậy: tại sao không làm cho hàm tạo mặc định không sử dụng được? Như vậy
...etc
CSV_Entry() {
throw Verbose_Exception( "CSV_Entry: do not use the default constructor" );
}
...etc
PS: trên một lưu ý phụ, nếu không làm cho hàm tạo mặc định không thể sử dụng được, liệu có tốt không khi đặt cú ném đó vào tiêu đề, vì dù sao không có chi tiết triển khai nào khác được tiết lộ?