Когда вы объявляете любой другой конструктор, компилятор не будет генерировать конструктор по умолчанию для вас.Если вы указали конструктор по умолчанию без аргументов, вы можете сделать его закрытым.
Помните, что компилятор может автоматически генерировать каждую из этих 4 функций-членов для класса.
- defaultконструктор без аргументов
- деструктор по умолчанию
- конструктор копирования
- оператор присваивания
Но он не будет генерировать по умолчанию, если вы его сами объявилиТо есть, если вы объявили конструктор самостоятельно, он не создаст конструктор по умолчанию.Если вы не объявили ни одного из других 3, компилятор может сгенерировать их.
edit: обратите внимание, что эта информация относится к C ++ 03, но в C ++ 11 она отличается от Matthieu MУпоминает в комментариях.C ++ 11 также позволяет явно запрещать конструктор.См. Ответ Офирмо .