В каком порядке создаются база и поля объекта C?

Конструкторы выведут A, B, X, C; при выходе из области видимости деструкторы выведут ~C, ~X, ~B, ~A. Порядок в списке инициализации этого не меняет.

Короткий ответ

Что ответить на собеседовании

Конструкторы выведут 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее