デフォルトのコンストラクターについて具体的に尋ねる
コンストラクターがオブジェクトのすべてのデータを初期化する場合、適切な初期化なしでは使用できないクラスを作成すると、デフォルトのコンストラクターが役に立たなくなるわけではありませんか?考慮してください:
// 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:サイドノートで、デフォルトのコンストラクタを使用できないようにするだけで良い場合、他の実装の詳細は明らかにされていないので、そのスローをヘッダーに入れても問題ありませんか?