Тип Pin
Тип Pin представляет собой обёртку над указателем,
которая гарантирует, что значение, на которое он указывает,
не будет перемещено в памяти. Это критически важно для
самореферентных структур и асинхронных задач, где перемещение
данных может привести к повреждению памяти. Параметром тип
принимает указатель P, который должен реализовывать
трейт Deref.
Синтаксис
Pin<P>
Пример
Давайте создадим закреплённое значение в куче с помощью
Box::pin и получим к нему доступ:
use std::pin::Pin;
fn main()
{
let pinned: Pin<Box<i32>> = Box::pin(12345);
println!("{}", pinned);
}
Результат выполнения кода:
12345
Пример
Давайте создадим закреплённое значение на стеке с помощью
Pin::new и убедимся, что к нему можно получить доступ:
use std::pin::Pin;
fn main()
{
let value = "abcde";
let pinned = Pin::new(&value);
println!("{}", pinned);
}
Результат выполнения кода:
"abcde"
Смотрите также
-
метод
new,
который создаёт закреплённое значение из указателя -
метод
new_unchecked,
который создаёт закреплённое значение без проверок -
тип
NonNull,
который представляет ненулевой указатель -
тип
MaybeUninit,
который представляет возможно неинициализированное значение