具体询问默认构造函数
考虑到构造函数会初始化一个对象的所有数据,如果我创建了一个未经适当初始化就无法使用的类,那么默认构造函数是否就没有用?考虑:
// 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:顺便说一句,如果可以使默认构造函数不可用是很好的做法,那么将抛出的结果放在标头中就可以了,因为无论如何都不会公开其他实现细节?