Умные указатели часто используют небезопасный (unsafe) код. Как говорилось ранее, они являются общими инструментами для взаимодействия с самыми низкими уровнями памяти в Rust.
Что такое небезопасный (unsafe) код? Небезопасный ведет себя точно как обычный Rust код с исключением нескольких возможностей, о которых компилятор не может предоставить гарантии.
Основной возможностью небезопасного кода является разыменование сырого указателя (dereferencing a raw pointer). Это означает взятие сырого указателя на позицию памяти, объявление "здесь существует структура данных" и превращение ее в представления другого типа данных, которые можно использовать (например, *const u8
в u8
).
В Rust нет способа следить за каждым из байтов, записываемым в память. Так как Rust не может дать гарантии, что именно существует за произвольным числом, использованным как сырой указатель (raw pointer), то необходимо поместить данное разыменование в unsafe { ... }
блок.
Умные указатели разыменовывают сырые указатели экстенсивно, но они хорошо зарекомендовали себя в том, что они делают