Для чего компилятор автоматически определяет конструктор по умолчанию
При написании своего класса, если я явно не определяю конструктор, то компилятор генерирует его сам. Но возникает вопрос - для чего? Я предположил, что он должен быть всегда, что бы не было никаких ошибок, но я могу сделать так: Constructor() = delete; и класс будет без конструкторов вообще, за исключением конструктора копирования и возможно других. Так для чего тогда компилятор его определяет, если можно и без него обойтись?
Ответы (1 шт):
Что делает компилятор:
Если в классе нет явных конструкторов и имеются только члены POD типов или структуры содержащие только POD и без явных конструкторов то компилятор создает неявный конструктор по умолчанию который инициализирует всю структуру нулями. Этот конструктор будет вызываться только если создаваемый объект имеет явный инициализатор. Это действие можно отменить
delete.Если у класса нет конструктора (явного и неявного) и смесь членов POD и не-POD (т.е классов с конструкторами), то неявный конструктор по умолчанию создается и вызывается в любом случае, но вызывает конструкторы по умолчанию только у не-POD членов.