С начала:
5.3.4 / 15:
- Если новый инициализатор имеет форму
()
, то элемент инициализируется значением (8.5);
8.5 / 5:
К значение-инициализация объект типа T означает:
если T является типом класса (раздел 9) с конструктором, объявленным пользователем (12.1), то вызывается конструктор по умолчанию для T (и инициализация некорректна, если у T нет доступного конструктора по умолчанию) ;
если T является типом класса, не являющимся объединением, без объявленного пользователем конструктора, то каждый нестатический член данных и компонент базового класса T инициализируется значением;
если T является типом массива, то каждый элемент инициализируется значением;
в противном случае объект инициализируется нулями
Первый маркер здесь не применяется, потому что у вас есть тип POD и, следовательно, вы не можете иметь конструктор, объявленный пользователем. Членами вашего типа могут быть только типы POD, такие как int
, float
и т. Д., Или вложенная структура, которая также является POD или массивом типов POD. Таким образом, в конечном итоге каждый из них заканчивается на последнем маркере: «в противном случае объект инициализируется нулями».
Эта инициализация происходит потому, что класс POD инициализируется в предоставленной вами памяти. Неважно, что память была выделена ОС или вы указали адрес.
Итак, ИМХО, ответ - да - члены будут инициализированы нулями.