Что выведет код Junior RAII и умные указатели спрашивают часто обновлено
Что выведет: порядок конструкторов и деструкторов
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <iostream>
#include <string>
struct Tracer {
std::string n;
explicit Tracer(std::string s) : n(std::move(s)) { std::cout << '+' << n << '\n'; }
~Tracer() { std::cout << '-' << n << '\n'; }
};
struct Pair {
Tracer a{"a"};
Tracer b{"b"};
};
int main() {
Tracer x{"x"};
{
Pair p;
}
Tracer y{"y"};
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: +x, +a, +b, -b, -a, +y, -y, -x. Члены класса создаются в порядке объявления (a, затем b), а уничтожаются в обратном (b, затем a), когда p выходит из блока.
Что выведет
+x
+a
+b
-b
-a
+y
-y
-x
Разбор
Члены класса создаются в порядке объявления (a, затем b), а уничтожаются в обратном (b, затем a), когда p выходит из блока. Локальные переменные main уничтожаются в обратном порядке создания: сначала y, потом x.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.