Здравствуйте, вообщем у меня есть сервер, внутри него
содержится вектор сессий, после удаления сессии
она убирается из списка, но память выделенная для нее
остается неосвобожденной.
Пробовала delete, но при этом вылезает ошибка.
Подскажите, пожалуйста.
Заранее спасибо.
Дело в том, что механизм расширения вектора основан на выделении памяти для хранения в два раза больше элементов (2 - в GCC, 1.5 - MVSC). Таким образом если в вектор вставляется новый элемент и при этом v.size() = 10 и v.capacity() = 10, происходит выделения памяти для хранения 20 элементов. Старые элементы копируются/перемещаются в новое место и добавляется вставляемый элемент. После операций v.size() = 11, v.capacity() = 20. Так как операция выделения памяти достаточно тяжелая, то в реализации вектора использовалась именно такая идея дабы увеличить производительность.
Чтобы освободить резервное место нужно вызвать v.shrink_to_fit(). Тогда v.size() будет равен v.capacity()
Ну и пример: