Rust会跟踪唯一的对象ID,我们可以打印它们吗?

问题描述 投票:2回答:1

Rust是否在幕后为每个对象使用某种实例id,如果是这样,它是否可以显示?

考虑一下

struct SomeStruct;

fn main() {
    let some_thing = SomeStruct;
    println!("{:UniqueId}", some_thing);
    let another = some_thing;
    println!("{:UniqueId}", another);
}

我在这里使用{:UniqueId}的伪格式字符串。在这种情况下,它可能会打印

4711
4712

我知道Rust会做一个按位复制,我想让它真正可见。如果我有这样的实例id,我可以通过比较id来使它可见。

可能有另一种方法来实现相同的目的。

rust identity
1个回答
3
投票

不,Rust没有任何自动生成的对象ID。这种功能会给每个用户带来一些开销,Rust希望尽可能减少开销。其他一切都应该选择加入。


据我所知,项目的地址是唯一的,你可以得到:

struct SomeStruct;

fn main() {
    let some_thing = SomeStruct;
    println!("{:p}", &some_thing);
    let another = some_thing;
    println!("{:p}", &another);
}
0x7ffc020ba638
0x7ffc020ba698

Everything1占用了某个地方的空间,因此您可以获取该空间的地址并打印出来。

对于某些情况,这可能太独特了。例如,当您转移项目的所有权时,您可能希望ID保持不变。我想在那种情况下,你必须自己动手。 Something like a global atomic variable that you can pull from when you create the object。这种方案不适用于您无法控制的对象。


1 - 好吧,差不多一切。我知道const物品不能保证有位置,这就是static物品存在的原因。

© www.soinside.com 2019 - 2024. All rights reserved.