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

标签 pointers memory rust

例如:

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

这有可能吗?

最佳答案

函数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/39463760/

相关文章:

c - 段错误,地址越界

JavaScript setTimeout 内存问题

c++ - 在没有手动分配缓冲区的情况下使用 sprintf

python - 诊断 boto3 中的内存泄漏

rust - 变量在嵌套 lambda 中存活时间不够长的借用检查错误

rust - 如何将值从一个列表移动/克隆到另一个列表?

rust - 在遍历同一 Vec 中另一个元素的字段时改变 Vec 元素的字段

C# 不安全类型 -> char*[] ,获取 char 数组上的指针

c++ - 如何使用由 for 循环创建的 vector vector 构建链表?

将 int 复制到不同的内存位置,接收比预期更多的字节