Задача · Память и умные указатели · урок 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
Ограничения: target живёт дольше объекта ScopeGuard, а вложенные ScopeGuard срабатывают каждый при выходе из своего блока, начиная с внутреннего.