</>
Plan du cours — 14/66

Smart pointers courants

Débutant
// Box<T> : valeur allouée sur le tas, propriétaire unique
let b = Box::new(5);

// Rc<T> : propriétaires multiples (mono-thread), compteur de références
use std::rc::Rc;
let a = Rc::new(String::from("partagé"));
let b = Rc::clone(&a);

// Arc<T> : comme Rc, mais utilisable entre threads
use std::sync::Arc;

// RefCell<T> : mutabilité intérieure, emprunts vérifiés à l'exécution
use std::cell::RefCell;
let cellule = RefCell::new(vec![1, 2]);
cellule.borrow_mut().push(3);

Cas pratique : quand le compilateur refuse un emprunt, dans l'ordre : 1) réduire la portée de la référence, 2) passer à .clone() si le coût est acceptable, 3) repenser la structure des données, 4) en dernier recours Rc<RefCell<T>> / Arc<Mutex<T>>.