如何检查两个变量是否指向内存中的同一对象?

17
例如:
struct Foo<'a> { bar: &'a str }

fn main() {
    let foo_instance = Foo { bar: "bar" };
    let some_vector: Vec<&Foo> = vec![&foo_instance];

    assert!(*some_vector[0] == foo_instance);
}
  1. 我想检查foo_instance是否引用与*some_vector[0]相同的实例,但我无法做到...

  2. 我不想知道这两个实例是否相等,我想检查变量是否指向内存中的同一实例

这是可能的吗?


2
你要找的术语是“引用相等”。 - Shepmaster
1个回答

24

这里有一个名为ptr::eq的函数:

use std::ptr;

struct Foo<'a> {
    bar: &'a str,
}

fn main() {
    let foo_instance = Foo { bar: "bar" };
    let some_vector: Vec<&Foo> = vec![&foo_instance];

    assert!(ptr::eq(some_vector[0], &foo_instance));
}

在 Rust 1.17.0 版本之前,你可以将类型转换为 *const T
assert!(some_vector[0] as *const Foo == &foo_instance as *const Foo);

它将检查引用是否指向内存中的同一位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接