不可变的 Box 指针和可变的 Box 指针有什么区别?

时间:2020-12-22 17:33:43

标签: rust

下面的(a)和(b)有什么区别

let a: Box<i32> = Box::new(1); // (a)
let mut a: Box<i32> = Box::new(1); // (b)
a = Box::new(2); // (c)
*a = 3; // (d)

(a) 等价于 C++ 中的以下内容

int const * const a = new int(1);

和(b)等价于

int * a = new int(1);

在 Rust 中,有什么等价于

int const * a = new int(1);  // this allows (c) but not (d)

int * const a = new int(1);  // this allows (d) but not (c)

1 个答案:

答案 0 :(得分:0)

<块引用>

在 Rust 中,有什么等价于

不使用 Box(或大多数其他智能指针),因为它完全没用。 Box 是唯一的指针,(c) 和 (d) 之间没有功能/可观察的区别。

您可以使用 references 来做到这一点:您可以使用 mut x: &Tmut x: &mut Tx: &Tx: &mut T

#[allow(unused_assignments)]
fn foo(mut v1; u8, mut v2: u8) {
    let a = &mut v1;
    a = &mut v2; // doesn't compile, `a` is an immutable binding
    *a = v2; // compiles, `a` is bound to a mutable reference
    
    let mut b = &v1;
    b = &v2; // compiles, `b` is a mutable binding
    *b = v2; // doesn't compile, `b` binds is bound to an immutable reference
}