Оценка делегированного конструктора - PullRequest
1 голос
/ 26 апреля 2019

Мне интересно узнать порядок вычисления конструктора при использовании делегирования.

Вот фрагмент моего кода:

Number(){
    length = 100;
    values = new int[length];
};
Number(int len) : Number(){
    length = len;
}

Обратите внимание, что они оба изменяют длину, но только однуприменяет эту длину к новому массиву.Этот код работает.

Мой вопрос: почему он работает?Применяют ли конструкторы только тот код, который не является избыточным?Или, может быть, в этой ситуации конструктор по умолчанию вызывается перед кодом в конструкторе не по умолчанию?

Спасибо за ваше время!

1 Ответ

1 голос
/ 26 апреля 2019

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

Вместо этого структурируйте это следующим образом:

Number() : length(100) {
  allocateValues();
};

Number(int len) : length(len) {
  allocateValues();
}

void allocateValues() {
  values = new int[length];
}

Это действительно плохая форма, так как std::vector и друзья могут помочь вам.Рассмотрим что-то подобное, используя insert:

Number() {
  values.insert(values.begin(), len, 100);
}

Number(int len) {
  values.insert(values.begin(), len, 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...