Українська
Підсумки
Висновки
Адреса не означає володіння. Кожний ресурс повинен мати зрозумілого відповідального за звільнення та чинний час життя для всіх доступів. Контейнери й розумні вказівники виражають ці правила в типах; діагностичні інструменти допомагають виявити порушення.
Питання для самоперевірки
- Чим значення, адреса і власник відрізняються?
- Що означають
&та*у виразах? - Чому ненульовий pointer може бути висячим?
- Як відрізняються pointer-to-const і const-pointer?
- Який крок має p+1?
- Чи можна розіменувати адресу після масиву?
- Які правильні пари new/delete?
- Чому nullptr не зануляє інші копії адреси?
- Що перевіряє AddressSanitizer?
- Чим get,reset і release відрізняються?
- Що стається з unique_ptr після передачі?
- Чому два shared_ptr із однієї сирої адреси небезпечні?
- Як виникає сильний цикл?
- Навіщо weak_ptr::lock?
- Чим span відрізняється від vector?
Контрольні питання до лабораторної роботи
- Чи кожний pointer є власником?
- Чим обмежено арифметику вказівників?
- Для чого рядку C потрібний нуль?
- Чим delete відрізняється від delete[]?
- Чому занулення однієї адреси не виправляє всі доступи?
- Що передає std::move для unique_ptr?
- Коли get допустимий без release?
- Як weak_ptr усуває сильний цикл?
- Чому parent у дереві може бути невласницьким?
- Що доводить і чого не доводить успішний запуск ASan?
Корисні посилання
- Розумні вказівники: https://learn.microsoft.com/cpp/cpp/smart-pointers-modern-cpp.
- unique_ptr: https://learn.microsoft.com/cpp/standard-library/unique-ptr-class.
- weak_ptr: https://learn.microsoft.com/cpp/standard-library/weak-ptr-class.
- ASan: https://learn.microsoft.com/cpp/sanitizers/asan.
- Правила: https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.