C ++ Добавление объектов, которые имеют конструкторы в массив - PullRequest
1 голос
/ 11 ноября 2011

Когда я объявляю массив, все переменные / объекты объявляются. Но что происходит с объектами, если их класс имеет конструкторы? Класс, который я использую, имеет 2 конструктора - один без аргументов и один с несколькими аргументами. Первый конструктор активируется после объявления? Или конструкторы не активируются?

Если произойдет первый случай, мне придется создать функцию, которая заменяет конструкторы.

Итак, что происходит с объектами во вновь объявленном массиве?

Ответы [ 2 ]

8 голосов
/ 11 ноября 2011

Зависит от того, как вы объявляете массив.Члены будут иметь значение по умолчанию, значение или инициализированную при копировании:

Foo x[] = { Foo(1), Foo(true, 'a'), Foo() };  // copy-initialize
Foo x[3] = { };                               // value-initialize
Foo x[3];                                     // default-initialize

Для типов классов, при инициализации по умолчанию и по умолчанию вызывается конструктор по умолчанию .Инициализация копирования может вызывать соответствующий конструктор напрямую.

Если вы не хотите использовать конструктор по умолчанию, вы не получите arces-инициализатора скобок и произнесения каждого члена по буквам.

2 голосов
/ 11 ноября 2011

Массивы будут вызывать конструкторы по умолчанию для всех объектов, если базовый тип имеет нетривиальный конструктор по умолчанию.

Я точно не помню правила, но целые, char * s, структурируют, члены которых всеимеют тривиальные конструкторы и т. д., все имеют тривиальные конструкторы по умолчанию.Массивы этих вещей (и массивы этих вещей и т. Д.) Не будут инициализированы, если вы не сделаете это явно.

Явно объявленный конструктор по умолчанию никогда не бывает тривиальным, поэтому объекты Foo в вашем массиве будутбыть построенным по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...