Вызывается ли конструктор немедленно для массива объектов как члена класса? - PullRequest
7 голосов
/ 23 ноября 2011
class gene{
    int ind;

    gene() {
        ind = 0;
    }
}

class network {
    gene g[10];
}

main() {
    network n;
}

Должен ли я вызывать конструктор для каждого объекта в массиве g, или он будет вызываться автоматически?

например, мне следует изменить класс сети следующим образом:

class network {
    gene g[10];

    network() {
        for(int i = 0; i < 10; i++)
            g[i] = gene();
    }
}

1 Ответ

7 голосов
/ 23 ноября 2011

В вашем случае, поскольку gene имеет нетривиальный конструктор по умолчанию, каждый элемент массива будет создан для вас по умолчанию. Т.е. нет, ваши изменения не нужны.

В случае, если базовый тип вашего массива является типом POD, вам потребуется инициализировать элементы вручную. Однако то, как вы это делаете, не идеально; вы хотели бы использовать значение-инициализацию вместо:

class network {
    somePodType x[10];
public:
    network() : x() { }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...