Как STL контейнеры уничтожают объекты - PullRequest
5 голосов
/ 15 июля 2011

Как stl вызывает деструкторы объектов, как в std :: vector :: erase или std :: vector :: pop_back?

Ответы [ 2 ]

6 голосов
/ 15 июля 2011

С vector связан распределитель , связанный с ним, элемент destroy используется для очистки.

Вызывает деструктор объектов без освобожденияпамять, в которой хранился объект.

Кстати, вы можете сами проследить за этим через источник при наличии достойной IDE.

4 голосов
/ 15 июля 2011

Возможно, некоторые дополнения к хорошему ответу Стива:

Действительно, внутреннее распределение выполняется распределителями, которые служат двум отдельным целям: выделение и освобождение памяти, а также построение и уничтожение объектов. Объекты всегда (копируются или перемещаются) строятся на insert и уничтожаются на erase, однако, внутренние изменяются.

Контейнеры, основанные на узлах, обычно выделяют и создают весь внутренний узел , который содержит как фактические данные объекта , так и (как указатели next / prev в двусвязных список). При удалении одного из них контейнер уничтожит объект и освободит память.

Контейнеры последовательности, такие как vector, будут строго разделять размещение и конструкцию; объем выделенной памяти обычно будет увеличиваться , но когда вы стираете (после вызова деструктора удаленного объекта), другие элементы должны быть перемещены для поддержания непрерывного расположения памяти.

Работа с внутренним распределителем может сильно отличаться от вашей обычной работы new/delete, если вы ее раньше не видели, но в конечном итоге всегда есть где-то конструкция и разрушение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...