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);
}