2016-09-13 2 views
4

Например:Как проверить, указывают ли две переменные на один и тот же объект в памяти?

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

ответ

8

Я сделал некоторые рытья на GitHub Rust и узнал, что there used to be a function for this in std, но его больше нет. Существует open RFC, чтобы вернуть его.

На данный момент вы можете выполнить приведение к *const T:

assert!(some_vector[0] as *const Foo == &foo_instance as *const Foo);

Он должен проверить, если ссылки указывают на то же место в памяти.

+0

работает отлично, спасибо! –

Смежные вопросы