Объявленная переменная может быть инициализирована нулевым значением, инициализированным значением или инициализированной по умолчанию.
В вашем примере:
Info *p = new Info(); <------- Value Initialization
Info *p = new Info; <------- Default Initialization
Стандарт C ++ 03 8.5 / 5 точно определяет каждый:
Чтобы обнулить объект типа T, необходимо:
- если T является скалярным типом (3.9), объекту присваивается значение 0 (ноль), преобразованное в T;
- если T не является типом класса объединения, каждый нестатический член данных и каждый базовый класс подобъект
инициализируется нулем;
- если T является типом объединения, первый именованный член данных объекта инициализируется нулем;
- если T является типом массива, каждый элемент инициализируется нулем; < br> - если T - ссылочный тип, инициализация не выполняется.
Чтобы инициализировать по умолчанию объект типа T означает:
- если T не является типом класса POD (пункт 9), вызывается конструктор по умолчанию для T (и инициализация неудачна) формируется, если T не имеет доступного конструктора по умолчанию);
- если T является типом массива, каждый элемент инициализируется по умолчанию;
- в противном случае объект инициализируется нулем.
Чтобы инициализировать значение объект типа T означает:
- если T является типом класса (пункт 9) с конструктором, объявленным пользователем (12.1), то вызывается конструктор по умолчанию для T (и инициализация плохо сформирована, если T не имеет доступного конструктора по умолчанию);
- если T не является типом класса Union без конструктора, объявленного пользователем, то каждый нестатический член данных и компонент базового класса T инициализируется значением;
- если T является типом массива, то каждый элемент инициализируется значением;
- в противном случае объект инициализируется нулем
person
Alok Save
schedule
14.01.2012