Я пытаюсь понять, когда на список инициализации ссылаются (участвуют) во время создания экземпляра нестатического члена базового класса и класса. Я прочитал эту статью и эта статья, в которой резюмируется порядок инициализации класса (я резюмировал его здесь)
Инициализация должна выполняться в следующем порядке:
Во-первых, и только для конструктора наиболее производного класса, как описано ниже, виртуальные базовые классы должны быть инициализированы в том порядке, в котором они появляются при обходе в глубину слева направо ориентированного ациклического графа базовых классов, где «слева -to-right» — это порядок появления имен базовых классов в списке базовых спецификаторов производных классов.
Затем непосредственные базовые классы должны быть инициализированы в порядке объявления, как они появляются в списке базовых спецификаторов (независимо от порядка мем-инициализаторов).
Затем нестатические члены данных должны быть инициализированы в том порядке, в котором они были объявлены в определении класса (опять же, независимо от порядка мем-инициализаторов). Наконец, выполняется тело конструктора.
Наконец, выполняется тело конструктора.
Теперь, прочитав вышеизложенное, я понимаю, что сначала создаются базовые классы, а затем производный класс. Кроме того, члены создаются в том порядке, в котором они были объявлены в определении класса, независимо от их положения в порядке списка инициализации.
Это заставляет меня думать, что каждый раз, когда создается экземпляр базового класса или переменной-члена во время создания экземпляра класса (в порядке, указанном выше), С++ в основном проверяет список инициализации класса, чтобы увидеть, был ли указан какой-либо конкретный параметр или аргумент для этой базы. класс или переменная-член. Если ничего не указано, то С++ вызывает конструктор по умолчанию. Правильно ли я понимаю. Пожалуйста, поправьте меня, если я ошибаюсь.