9 декабря 2008 г.

Освобождение памяти в std::vector

Я почему-то раньше был уверен, что выделенную память в std::vector можно освободить присваиванием:

typedef vector<int> int_vector;

int_vector v;
v.resize(10);
...
v = int_vector();

Оказалось, ошибался. Так не освобождает. По крайней мере, стандарт не обязывает.

Следовательно, остался только один способ освободить память — с помощью vector::swap:

int_vector().swap(v);


(способ описан в "Эффективном использовании STL" Скотта Мейерса)

2 комментария:

  1. у Страуструпа этот способ тоже описан =)

    ОтветитьУдалить
  2. Точно :)
    К сожалению, пока не пользуешься в памяти надолго не откладывается :)

    ОтветитьУдалить