Pin与Unpin的幕后:自引用结构的正确构建与异步陷阱
深入Pin的核心机制,揭示自引用结构如何在堆上安全存在,以及为什么异步块会悄悄引入Pin。 · 难度:入门 · +10XP
Pin与Unpin的幕后:自引用结构的正确构建与异步陷阱
Pin
use std::pin::Pin;
use std::marker::PhantomPinned;
struct SelfReferential {
data: String,
ptr: *const String,
_pin: PhantomPinned,
}
impl SelfReferential {
fn new(data: String) -> Pin> {
let mut b = Box::new(SelfReferential { data, ptr: std::ptr::null(), _pin: PhantomPinned });
let ptr = &b.data as *const String;
b.ptr = ptr;
Pin::new(b)
}
}