Using smart pointers for cases where the pointer overhead is not critical such as tree nodes. Switch to move semantics for vectors.