我可以在同一范围内对值进行可变引用和对具有相同值的特征对象进行可变引用吗?那是未定义的行为吗?下面添加了一个示例代码片段以进行说明。
在下面的代码中,同时拥有 check 和 check_trait 引用是否有效。
pub trait fire {
fn hi(&self);
}
struct foo {
bar: isize,
}
impl foo {
fn new(x: isize) -> Self {
foo { bar: x }
}
}
impl fire for foo {
fn hi(&self) {
println!("hi");
}
}
fn main() {
let mut init = Box::new(foo::new(1));
let leaked = Box::into_raw(x);
let check = unsafe { leaked.as_mut().unwrap() };
let mut trait_object:Box<dyn fire> = unsafe {
Box::from_raw(leaked)
};
let check_trait = &mut trait_object;
println!("{}", check.bar);
check_trait.hi(5);
}