Типы не инициализируются. Только объекты некоторого типа инициализируются. Как и когда они инициализируются, зависит от того, как и где определен соответствующий объект. Вы не указали ни одного объекта в своем вопросе, поэтому сам по себе ваш вопрос не имеет особого смысла - в нем отсутствует необходимый контекст.
Например, если вы определяете статический объект типа foo
static foo foo_object; // zeros
оно будет автоматически инициализироваться нулем, потому что все объекты со статической продолжительностью всегда автоматически инициализируются нулями.
Если вы определите автоматический объект типа foo
без инициализатора, он останется неинициализированным
void func()
{
foo foo_object; // garbage
}
Если вы определите автоматический объект типа foo
с помощью агрегатного инициализатора, он будет инициализирован в соответствии с этим инициализатором
void func()
{
foo foo_object1 = { 1, 2 }; // initialized
foo foo_object2 = {}; // initialized with zeros
}
Если вы выделите свой объект с помощью new
и не предоставите инициализатор, он останется неинициализированным
foo *p = new foo; // garbage in `*p`
Но если вы используете инициализатор ()
, он будет инициализирован нулем
foo *p = new foo(); // zeros in `*p`
Если вы создаете временный объект типа foo
с использованием выражения foo()
, результат этого выражения будет инициализирован нулем
bool b = foo().my_bool; // zero
int i = foo().my_int; // zero
Итак, еще раз, в вашем конкретном случае детали инициализации зависят от того, теперь вы создаете объект вашего типа, а не от самого вашего типа. Ваш тип сам по себе не имеет встроенных средств инициализации и никак не мешает инициализации.