Boxes
Another pointer type in Rust is called the boxed pointer Box<T>
, which can be defined for a value of a generic type T
. A box is a non-copyable value. This pointer type is used to allocate objects on the heap.
For example, here we allocate an Alien value on the heap with: // see code in Chapter 7/code/boxes1.rs let mut a1 = Box::new(Alien{ planet: "Mars".to_string(), n_tentacles: 4 }); println!("{}", a1.n_tentacles); // 4
The mutable variable a1
is the only owner of this memory resource that may read from and write to it.
We can make a reference to the value pointed to by the box pointer, and if both the original box and this new reference are mutable, we can change the object through this reference:
let a2 = &mut a1; println!("{}", a2.planet ); // Mars a2.n_tentacles = 5;
After such a borrow the usual ownership rules as above hold: a1
no longer has access, not even for reading:
// error: cannot borrow `a1.n_tentacles` as immutable because `a1` is also borrowed as mutable...