В режиме оптимизации, если ваш класс или структура - POD (имеет только POD-типы) и конструктор не указан, любой компилятор C ++ производственного качества не только пропустит вызов конструктора, но даже не сгенерирует его.
Если в вашем классе есть не-POD члены, для которых нужно вызывать конструкторы, компилятор сгенерирует конструктор по умолчанию, который вызывает конструкторы членов. Но даже тогда - он не будет инициализировать типы POD. То есть если вы не инициализируете member
явно, вы можете оказаться там с мусором.
Все это может получить даже фантазии, если ваш компилятор / компоновщик имеет LTO.
Надеюсь, это поможет! И сначала заставьте вашу программу работать, затем используйте профилировщик, чтобы обнаружить медленные места, а затем оптимизировать его. Преждевременная оптимизация может не только сделать ваш код нечитаемым и тратить кучу времени, но также может не помочь вообще. Вы должны знать, что оптимизировать в первую очередь.
Вот разборка кода в вашем примере (x86_64, gcc 4.4.5):
main:
subq $8, %rsp
movl $4, %edi
call _Znwm
movl $4, %edi
movl $0, (%rax)
call _Znwm
movl $4, %edi
movl $0, (%rax)
call _Znwm
movl $400, %edi
movl $3, (%rax)
call _Znam
xorl %eax, %eax
addq $8, %rsp
ret
Как видите, конструкторов вообще не вызывается. Классов вообще нет, каждый объект представляет собой целое число в 4 байта.
С компилятором MS, YMMV. Таким образом, вы должны проверить разборку самостоятельно. Но результат должен быть похожим.
Удачи!