Pointeurs intelligents
Orestis Malaspinas
Vec<T>, String: ces types possèdent de la mémoire et la manipule eux-mêmes.Deref: comment on déréférence le pointeur.Drop: comment on détruit le pointeur.Box<T> pointeur unique qui alloue des données sur la pile.Rc<T> “reference counted” type, qui permet de partager la propriété.Ref<T> et RefMut<T> qui permet d’imposer les règles de propriété à l’exécution plutôt qu’à la compilation.Box<T>
fn main() 
{
    let num = Box::new(10);
    println!("num = {}", num);  // déréférenciation automatique
    println!("num = {}", *num); // déréférenciation explicite
    let x = 10;
    // seule la déréférenciation explicite marche
    println!("Is {} equal to {}?. Answer: {}", num, x, *num == x); 
    let y = &x;
    // La seule différence est qu'ici nous avons une référence 
    println!("Is {} equal to {}?. Answer: {}", y, x, *y == x);
} 
enum List {
    Elem(i32, List),
    Nil,
}
use List::{Elem, Nil};
fn main() 
{
    let list = Elem(1, Elem(2, Elem(3, Nil)));
} 
Box<T> sa taille est connue.
#[derive(Debug)]
enum List {
    Elem(i32, Box<List>),
    Nil,
}
use List::{Elem, Nil};
fn main() 
{
    let list = Elem(1, Box::new(Elem(2, Box::new(Elem(3, Box::new(Nil))))));
    println!("{:?}", list);
}