Перейти до змісту

ЛР19. Рефакторинг до RAII

Коротко про роботу

Початковий код керує ресурсом вручну та має шлях виконання, де легко пропустити звільнення ресурсу. Варіант визначає STUDENT_X.

Відкрити робочий зошит Як виконувати лабораторні

1. Умова

Початковий код керує ресурсом вручну та має шлях виконання, де легко пропустити звільнення ресурсу.

Усі обчислення виконуйте з даними свого STUDENT_X. Значення варіанта друкує перша комірка зошита.

2. Що треба знати

Робота виконується після Л1–Л9. Потрібні поняття:

  1. ресурс і володіння
  2. new / delete у контрольованому прикладі
  3. RAII
  4. std::unique_ptr

Межа матеріалу

Використовуйте поняття, вивчені до Л1–Л9. Не залишайте new/delete у фінальній версії, написаній студентом, якщо ресурс має одного власника.

3. Варіант, вхідні дані та результат

У зошиті заповніть STUDENT_NAME, STUDENT_GROUP і STUDENT_X від 1 до 30.

Вхідні дані

Поле Зміст
archetype схема проблеми володіння
values числові дані
early_exit прапорець ризикованої гілки
starter_code код для рефакторингу

Поля результату

Поле Зміст
result_primary результат звичайного шляху
result_branch результат гілки з раннім завершенням

Назви полів результату не змінюйте.

4. Терміни і правила

Терміни

  • ресурс — об’єкт або зовнішній засіб, яким треба керувати протягом визначеного часу життя.
  • RAII — підхід C++, де ресурс належить об’єкту та автоматично звільняється разом із завершенням часу життя цього об’єкта.

Правила

  1. starter_code задає конкретний випадок ручного володіння ресурсом. values підставляються за порядком як value, bonus/limit, a, b, c відповідно до фрагмента.
  2. result_primary — спостережуваний результат звичайного шляху початкового коду.
  3. result_branch — спостережуваний результат ранньої гілки; для фрагмента без окремої ранньої гілки він збігається з основним результатом.
  4. Фінальна версія має автоматичне керування часом життя через автоматичну тривалість зберігання або std::unique_ptr.

5. Завдання

Завдання 1

Прочитайте starter_code. Запишіть, хто володіє ресурсом, де він створюється і де може не звільнитися.

Завдання 2

Перепишіть код через автоматичний об’єкт або std::unique_ptr. Запишіть звичайний результат у result_primary.

Завдання 3

Перевірте ранній вихід і запишіть результат у result_branch. Поясніть, чому ресурс звільняється автоматично.

6. Перевірка і здача

  1. Запустіть самоперевірку та виправте помилки.
  2. Перезапустіть ядро і виконайте роботу ще раз від початку.
  3. Збережіть .ipynb і PDF з кодом та результатами.

Назва PDF: LR19_Прізвище_Група_VNN.pdf.