rust - Pin::as_mut(&mut self )

标签 rust

Pin::as_mut 的来源- pin.rs:

impl<P: DerefMut> Pin<P> {
    ...
    pub fn as_mut(&mut self) -> Pin<&mut P::Target> {    
        unsafe { Pin::new_unchecked(&mut *self.pointer) }
    }
    ...
}
我不明白为什么使用&mut *self.pointer而不是self.pointer,下面的句子有什么问题?
unsafe { Pin::new_unchecked(self.pointer) }

最佳答案

Pin::new_unchecked(self.pointer)只会返回Pin<P>而不是Pin<&mut P::Target>,因此不会考虑使用deref强制。它还将尝试将pointerself中移出,并导致编译器错误。
使用*会将self.pointer取消引用为P::Target,而&mut使其返回可变引用。

关于rust - Pin::as_mut(&mut self ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65988115/

相关文章:

rust - 如何在 QEMU 模拟器下在 Windows 10 64 位上运行基于 Rust 的 Redox OS 的预编译镜像?

error-handling - fn foo() -> 结果 <()> 抛出 "expected 2 type arguments"

rust - 如何使Rust使用DMA来更改PWM端口的占空比?

filter - 你如何处理 Rust filter() 中的错误?

string - 如何创建具有字符串成员的 Rust 结构?

logging - 如何使用 log4rs 创建自定义过滤器类型?

sockets - 在 BufReader 中包装后无法从底层读取器读取数据

rust - Jack 音频客户端名称超过 4 个字符会中断客户端

arrays - 如何创建超过 32 个泛型类型元素的数组 T : Default?

c++ - 哪种方法在Rust中存储 `uint8_t*` C缓冲区是更安全的方法?