1/6

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.