Возможно, некоторые дополнения к хорошему ответу Стива:
Действительно, внутреннее распределение выполняется распределителями, которые служат двум отдельным целям: выделение и освобождение памяти, а также построение и уничтожение объектов. Объекты всегда (копируются или перемещаются) строятся на insert
и уничтожаются на erase
, однако, внутренние изменяются.
Контейнеры, основанные на узлах, обычно выделяют и создают весь внутренний узел , который содержит как фактические данные объекта , так и (как указатели next / prev в двусвязных список). При удалении одного из них контейнер уничтожит объект и освободит память.
Контейнеры последовательности, такие как vector, будут строго разделять размещение и конструкцию; объем выделенной памяти обычно будет увеличиваться , но когда вы стираете (после вызова деструктора удаленного объекта), другие элементы должны быть перемещены для поддержания непрерывного расположения памяти.
Работа с внутренним распределителем может сильно отличаться от вашей обычной работы new/delete
, если вы ее раньше не видели, но в конечном итоге всегда есть где-то конструкция и разрушение.