Конструкторы выведут A, B, X, C; при выходе из области видимости деструкторы выведут ~C, ~X, ~B, ~A. Порядок в списке инициализации этого не меняет.
В каком порядке создаются база и поля объекта C?
Конструкторы выведут A, B, X, C; при выходе из области видимости деструкторы выведут ~C, ~X, ~B, ~A. Порядок в списке инициализации этого не меняет.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В C++ класс C наследуется от A и объявляет поля B b; X x; именно в таком порядке. Каждый конструктор печатает имя класса, каждый деструктор — имя с префиксом ~. Конструктор C указывает список x(), b(), A() и затем печатает C. Создаётся один локальный C, исключений нет. Каков вывод?
Ответ
Конструкторы выведут A, B, X, C; при выходе из области видимости деструкторы выведут ~C, ~X, ~B, ~A. Порядок в списке инициализации этого не меняет.
Сначала создаётся базовый подобъект A, затем поля в порядке объявления в классе: b и x, после них выполняется тело конструктора C. При разрушении сначала работает тело ~C, затем поля уничтожаются в обратном порядке и последней — база. Лучше записывать список инициализации в фактическом порядке, чтобы код не вводил читателя в заблуждение и не скрывал зависимости полей.
Источник: eel.is.