【问题标题】:How to check if two variables point to the same object in memory?如何检查两个变量是否指向内存中的同一个对象?
【发布时间】:2017-01-20 16:26:24
【问题描述】:

例如:

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. 我不想知道这两个实例是否相等;我想检查变量是否指向内存中的同一个实例

有可能吗?

【问题讨论】:

  • 您要查找的术语是“引用相等”。

标签: pointers memory rust


【解决方案1】:

有函数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);

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

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2010-10-11
    • 2023-04-03
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多