Задача · Память и умные указатели · урок 10 из 12
Задача: ScopeGuard
Напишите класс ScopeGuard, который выполняет действие при выходе из блока. Конструктор ScopeGuard(Callback cb, int& target) запоминает функцию cb и переменную target, а деструктор ~ScopeGuard() вызывает cb(target) ровно один раз. Копирование ScopeGuard запретите, а поля добавьте сами.
Тип Callback уже объявлен в файле: это указатель на функцию вида void f(int&), и вызывают его так же, как функцию. В тестах increment прибавляет к своему аргументу единицу.
- после блока
{ ScopeGuard guard(increment, calls); }значениеcallsрастёт с0до1 - пока
guardсуществует,callsне меняется std::is_copy_constructible_v<ScopeGuard>→false: так тесты проверяют, что конструктор копирования удалён и скопироватьScopeGuardнельзя
Ограничения: target живёт дольше объекта ScopeGuard, а вложенные ScopeGuard срабатывают каждый при выходе из своего блока, начиная с внутреннего.
Не добавляйте лишних #include, если в задаче это прямо не сказано.
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.