For example:
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);
}
I want to check if foo_instance
references the same instance as *some_vector[0]
, but I can't do this ...
I don't want to know if the two instances are equal; I want to check if the variables point to the same instance in the memory
Is it possible to do that?
Yes, two or more references, say from parameters and/or local variables and/or instance variables and/or static variables can all reference the same object.
Ya with reference variables you can make the parameter variable reside at the same address as the argument variable.
The Is Operator returns True if the objects are identical, and the IsNot Operator returns True if they are not.
Two objects having equal values are not necessarily identical. Put simply: == determines if the values of two objects are equal, while is determines if they are the exact same object.
There is the function 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));
}
Before this was stabilized in Rust 1.17.0, you could perform a cast to *const T
:
assert!(some_vector[0] as *const Foo == &foo_instance as *const Foo);
It will check if the references point to the same place in the memory.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With