Рассмотрим некоторые умные указатели, которые мы уже видели, вроде Vec<T>
и String
.
Vec<T>
является умным указателем, который владеет некоторым регионом байт памяти. Компилятор Rust не имеет понятия, что находится в этих байтах. Умный указатель интерпретирует их, что означает захват элементов из этой управляемой памяти, отслеживание где начинаются и заканчиваются структуры данных в этих байтах и затем, наконец, разыменовывание сырого указателя на структуры данных в виде красивого, чистого, эргономичного интерфейса, который можно использовать (например my_vec[3]
).
Аналогично String
отслеживает область байт памяти, программно ограничивает записанное в её содержимое так, чтобы оно было всегда допустимым utf-8
символом и помогает разыменовать эту область памяти в тип &str
.
Обе эти структуры используют небезопасное разыменование сырых указателей для выполнения своей работы.
Детали для запоминания: