Я заметил, что память для вектора выделяется динамически. Так для локального вектора, где выделяется память?
f(){ vector<int> vi; }
Вектор выделяется в стеке (28 байт в моей системе). Содержимое вектора размещается в куче.
Вы можете изменить способ выделения памяти для контейнеров STL с помощью комбинации типа шаблона Allocator и объекта распределителя, передаваемого в конструктор.
Я задал вопрос о том, как заставить вектор использовать стековое хранилище, и получил этот ответ. Возможно, вам будет интересно.
vector выделяется везде, где allocator, который он использует, решает выделить из.
vector
allocator
В случае по умолчанию std::allocator используется ::operator new().
std::allocator
::operator new()
Чтобы расширить ответ Якоби, RAII означает, что когда vi выходит за пределы области видимости, все, что выделено с помощью new (внутри вектора), равно delete d (в деструкторе вектора). Вот как вы комбинируете распределение стека и кучи.
vi
new
delete