gpt4 book ai didi

rust - 您能否在Rust中将原始指针转换为具有生存期的引用?

转载 作者:行者123 更新时间:2023-12-03 11:33:20 26 4
gpt4 key购买 nike

我正在做一些骇人听闻的事情,但对我在Rust中的特定项目很有用。我知道我们可以从引用->原始指针->地址(使用)进行转换,但是我们可以向后进行转换,尤其是使用生命周期注释吗?例如,我有以下代码:

struct Name<'a> {
name: &'a str,
}

impl <'a> Name<'a> {
fn to_addr<'b>(&'b self) -> usize { ... }
fn from_addr<'b>(address: usize) -> &'b Name<'a> {
// assuming the address is valid,
// is this even possible to return an reference with both lifetimes?
}
}

最佳答案

是的。当然是它的unsafe,但是:

fn from_addr<'b>(address: usize) -> &'b Name<'a> {
unsafe { &*(address as *const Self) }
}
您必须自己确保Rust的内存安全要求:在确保生命周期正确的基础上,Rust的内存必须为非null,不悬空,对齐,不可变别名等。
实际上,我将整个功能标记为 unsafe,因为生命周期 'b(并取决于用法 'a)是在调用站点确定的。调用者应该知道,为了安全地使用它,必须确保有一些保证。
unsafe fn from_addr<'b>(address: usize) -> &'b Name<'a> {
&*(address as *const Self)
}

关于rust - 您能否在Rust中将原始指针转换为具有生存期的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66621363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com