Что выведет код Middle RAII и умные указатели обновлено
Что выведет: use_count и weak_ptr
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <iostream>
#include <memory>
int main() {
auto p = std::make_shared<int>(5);
std::cout << p.use_count() << '\n';
{
auto q = p;
std::cout << p.use_count() << '\n';
}
std::weak_ptr<int> w = p;
std::cout << p.use_count() << ' ' << w.expired() << '\n';
auto u = std::move(p);
std::cout << (p == nullptr) << ' ' << u.use_count() << '\n';
u.reset();
std::cout << w.expired() << '\n';
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 1, 2, 1 0, 1 1, 1. Копия q увеличивает счётчик до 2, после блока снова 1. weakptr сильный счётчик не меняет, объект жив: expired() ложно.
Что выведет
1
2
1 0
1 1
1
Разбор
Копия q увеличивает счётчик до 2, после блока снова 1. weak_ptr сильный счётчик не меняет, объект жив: expired() ложно. Перемещение передаёт владение без изменения счётчика: p пуст, у u счётчик 1. После reset объект уничтожен, w.expired() истинно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.