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没有任何自动生成的对象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
物品存在的原因。