The typical variables we have seen so far have been local. They exist only while we are within scope, and the compiler deals with creating and destroying them.
These types of entities are stored in memory on the stack. But there is other memory available, on the free store or heap. Allocation of this memory is at run-time, and use of this memory is persistent so we need to explicitly say when we want to stop using it.
We don’t know how many elements we need.
Improved storage efficiency.
Although we have to be careful with resizing costs.
Some data is associated with or needs to be known by part of our program, but is owned somewhere else. That sharing could be part of persistence outside of the initial creation scope.