0

値への変更可能な参照と、同じスコープ内の同じ値の特性オブジェクトへの変更可能な参照を持つことはできますか? それは未定義の動作ですか?明確にするために、コード スニペットの例を以下に追加します。

以下のコードでは、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);
}
4

0 に答える 0