Заставить a std::vector освободить память?

Возможные дубликаты:
уменьшить емкость stl-вектора
Это обычное поведение для std::vector?

Я знаю, что std::vectors не "освобождает" память при вызове vector.clear(), но как я могу это сделать? Я хочу, чтобы он выпустил все свои ресурсы, как только я его очищу, но я не хочу его уничтожать.

Вот что происходит прямо сейчас. У меня есть класс под названием OGLSHAPE, и я вставляю их в вектор из них. Я надеялся, что как только я сделаю shapevec.clear(), я верну всю свою память, но вернусь только 3/4. Я не уверен на 100%, если это утечка памяти или нет, поэтому я хочу освободить все ресурсы, чтобы убедиться, что это не утечка. Благодаря

Ответ 1

Используйте трюк подкачки:

#include <vector>

template <typename T>
void FreeAll( T & t ) {
    T tmp;
    t.swap( tmp );
}

int main() {
    std::vector <int> v;
    v.push_back( 1 );
    FreeAll( v );
}

Ответ 2

Рассмотрим использование трюка подкачки:

вектор (форма).swap(форма);