Rust 是否在幕后为每个对象使用某种类型的实例 ID,如果是这样,是否可以使其可见?
考虑这个
struct SomeStruct;
fn main() {
let some_thing = SomeStruct;
println!("{:UniqueId}", some_thing);
let another = some_thing;
println!("{:UniqueId}", another);
}
Run Code Online (Sandbox Code Playgroud)
我在这里使用伪格式字符串{:UniqueId}。在这种情况下,它可能会打印
struct SomeStruct;
fn main() {
let some_thing = SomeStruct;
println!("{:UniqueId}", some_thing);
let another = some_thing;
println!("{:UniqueId}", another);
}
Run Code Online (Sandbox Code Playgroud)
我知道 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);
}
Run Code Online (Sandbox Code Playgroud)
struct SomeStruct;
fn main() {
let some_thing = SomeStruct;
println!("{:p}", &some_thing);
let another = some_thing;
println!("{:p}", &another);
}
Run Code Online (Sandbox Code Playgroud)
所有1都在某处占用空间,因此您可以获取该空间的地址并打印出来。
对于某些情况,这可能太独特了。例如,当您转让项目的所有权时,您可能希望 ID 保持不变。我认为在这种情况下,你必须自己动手。类似于全局原子变量的东西,您可以在创建对象时从中提取。这种方案不适用于您无法控制的对象。
1 - 嗯,几乎所有的东西。我知道const项目不能保证有一个位置,这就是static项目存在的原因。
| 归档时间: |
|
| 查看次数: |
1071 次 |
| 最近记录: |