例如:
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);
}
我想检查
foo_instance
是否引用与*some_vector[0]
相同的实例,但我不能这样做......我不想知道这两个实例是否相等;我想检查变量是否指向内存中的同一个实例
这有可能吗?
最佳答案
函数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);
它将检查引用是否指向内存中的同一位置。
关于pointers - 如何检查两个变量是否指向内存中的同一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58842799/