Drop, RAII, порядок уничтожения
Трейт Drop, порядок уничтожения, флаги уничтожения, mem::forget и утечки, ManuallyDrop, dropck.
Тема объясняет трейт Drop и идиому RAII: ресурс освобождается деструктором, когда его владелец выходит из области видимости. Вопросы о трейте Drop проверяют, для каких типов его можно реализовать (E0120, E0367), почему в деструкторе нельзя переместить поле из self (E0507), как уничтожаются поля и объекты-трейты, что сообщает needs_drop и как страж срабатывает при раннем возврате. Раздел о порядке уничтожения разбирает поля, параметры функции, привязки шаблонов, элементы Vec, значения static, временные значения в scrutinee match и в хвостовом выражении блока, а также случаи, когда порядок не определён. Флаги уничтожения (drop flags) показывают, как компилятор отслеживает условную инициализацию, перемещение в ветвях и циклах и частичное перемещение; раздел о mem::forget, ManuallyDrop и Box::leak объясняет, почему утечка в Rust безопасна и что происходит с забытым Drain. Последний раздел посвящён проверке уничтожения (dropck): почему деструктор требует, чтобы заимствованные данные его пережили (E0597), почему исход решает порядок объявления и почему Vec<&T> проходит проверку благодаря #[may_dangle]. Тема опирается на владение и перемещение и подготавливает к небезопасному коду.
48 вопросов: базовый уровень — 21, средний — 22, углублённый — 5. 5 справок, 14 источников.
Разделы
- Трейт
Dropи RAII - Порядок уничтожения
- Флаги уничтожения (drop flags)
mem::forget, утечки,ManuallyDrop- Проверка уничтожения (dropck)
Предыдущая тема: Умные указатели, внутренняя изменяемость · Следующая тема: Многопоточность