ЛР19. Рефакторинг до RAII
Коротко про роботу
Початковий код керує ресурсом вручну та має шлях виконання, де легко пропустити звільнення ресурсу. Варіант визначає STUDENT_X.
Відкрити робочий зошит Як виконувати лабораторні
1. Умова
Початковий код керує ресурсом вручну та має шлях виконання, де легко пропустити звільнення ресурсу.
Усі обчислення виконуйте з даними свого STUDENT_X. Значення варіанта друкує перша комірка зошита.
2. Що треба знати
Робота виконується після Л1–Л9. Потрібні поняття:
- ресурс і володіння
new/deleteу контрольованому прикладі- RAII
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++, де ресурс належить об’єкту та автоматично звільняється разом із завершенням часу життя цього об’єкта.
Правила
starter_codeзадає конкретний випадок ручного володіння ресурсом.valuesпідставляються за порядком якvalue,bonus/limit,a,b,cвідповідно до фрагмента.result_primary— спостережуваний результат звичайного шляху початкового коду.result_branch— спостережуваний результат ранньої гілки; для фрагмента без окремої ранньої гілки він збігається з основним результатом.- Фінальна версія має автоматичне керування часом життя через автоматичну тривалість зберігання або
std::unique_ptr.
5. Завдання
Завдання 1
Прочитайте starter_code. Запишіть, хто володіє ресурсом, де він створюється і де може не звільнитися.
Завдання 2
Перепишіть код через автоматичний об’єкт або std::unique_ptr. Запишіть звичайний результат у result_primary.
Завдання 3
Перевірте ранній вихід і запишіть результат у result_branch. Поясніть, чому ресурс звільняється автоматично.
6. Перевірка і здача
- Запустіть самоперевірку та виправте помилки.
- Перезапустіть ядро і виконайте роботу ще раз від початку.
- Збережіть
.ipynbі PDF з кодом та результатами.
Назва PDF: LR19_Прізвище_Група_VNN.pdf.