2012-06-04 5 views
3

Недавно я исправил ошибку в моем приложении: проблема заключалась в том, что объект, который находится в стеке, оставил поле неинициализированным.Правила для инициализации неявных полей

Объект имел объявление класса этого типа:

struct A{ 
    int somefield, someotherfield; 
    A(): someotherfield(0) {} 
} 

и при объявлении локальной переменной (например, A var; в функции), somefield осталось инициализирована, а поэтому чтение из него будет возвращать randomish стоимость.

Я был уверен, что поля класса, которые не отображаются в списке инициализации конструктора, всегда будут инициализироваться синтезированным тривиальным конструктором (в случае int, нулевого значения). Очевидно, я ошибаюсь.

Итак, каковы общие правила о неявной инициализации поля?

ответ

4
  • классов и структуры инициализируются застройщиком
  • Основных типов Int двойного полукокс короткие ... не инициализируются и содержат случайные числа
  • Указателей не инициализируются и указуют на случайные позиции
  • массивов классов или структуры вызывают инициализацию каждого элемента его конструктором
  • массивы основных типов или указателей являются случайными.
+0

Что относительно массивов? одинаковые правила для каждого элемента? –

Смежные вопросы