Box<T> is the simplest smart pointer: one heap allocation, one owner, freed when the box drops. It adds no reference counting and no runtime checks.
Its defining use is giving a recursive type a known size:
enum Expr {
Num(i64),
Add(Expr, Expr), // error: recursive type has infinite size
}
To lay out Expr, the compiler must know how big Expr is — which requires knowing how big Expr is. A box breaks the loop: it is always one pointer wide, whatever it points to.
