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
万物1占用某处的空间,因此您可以获取该空间的地址并进行打印。
在某些情况下,这可能太独特了。例如,当您转移项目的所有权时,您可能希望ID保持不变。我认为在这种情况下,您必须自己动手。在创建对象时可以从中获取诸如全局原子变量之类的东西。这样的方案不适用于您无法控制的对象。
1-好吧,几乎所有东西。我知道const
不能保证物品具有位置,这就是为什么static
物品存在的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句