有没有办法让两个指向同一内存地址的 *mut 指针



我正在尝试在 Rust 中实现一个双重链表以获得乐趣。

我面临着所有权制度的问题,无法为两个指针指定别名。我意识到指针混叠的好处,但这次我想破例。

我想知道是否有任何方法可以让两个*mut A指针指向同一个内存地址。

例如,现在我有这个:

self.first = unsafe { mem::transmute(new_node) };
// How do I set self.last to point at the same new_node?

我知道RcRefCell类型,但我想避免在数据结构中使用它们,因为它们具有运行时开销。

虽然我同意 dbaupp,您应该提供更多上下文,因为这不是您应该做的,但这是您提出的确切问题的答案:

fn main() {
    let mut a: u32 = 42;
    let b: *mut u32 = &mut a;
    let c: *mut u32 = &mut a;
    println!("{:?}, {:?}", b, c);
}

现在,您有两个指向同一内存地址的*mut u32指针。没有unsafe!当然,如果你想使用指针,你现在必须做更多的思考,以确定你是否完全打破了编译器期望的所有假设和保证!:-)

我不确定你的意思。 &mut是具有别名强制执行的那个。 *mut可以像其他任何东西一样复制,取消引用原始指针当然是unsafe,但您应该能够这样做:

fn main() {
    let mut x: i32 = 5i32;
    let xptr: *mut i32 = &mut x as *mut i32;
    let xptr_copy: *mut i32 = xptr;
    unsafe {
        println!("xptr: {}", *xptr);
        println!("xptr_copy: {}", *xptr_copy);
    }
}

婴儿用围栏

最新更新