When a container has exhausted its free storage and additional elements have to be inserted to it, the container re-allocates itself. First, a new memory buffer large enough to store the container is allocated. Existing elements are then copied to the new memory location. The destructors of the elements in their previous location are successively invoked. Finally, the original memory buffer is released. Clearly, frequent re-allocations can impose a significant performance overhead.