For a long time I was using std::vector and std::shared_ptr hand in hand. Recently I started using std::shared_ptr when
std::vector
std::shared_ptr
It is a valid way of storing immutable (and thus thread safe) objects, a building block for a per-element copy-on-write cache. Definitely not an anti-pattern.