как освободить память unordered_set? - PullRequest
2 голосов
/ 12 ноября 2011

Интересно, как освободить память, занимаемую std :: unordered_set?

Мне кажется, unordered_set :: clear () просто очистить набор без освобождения памяти.

Мне нужно освободитьunordered_set удерживается локальной функцией.Каждый раз, когда я вызываю локальную функцию, она потребляет некоторую память, поэтому мне нужно освободить ее в конце локальной функции.

Спасибо

Ответы [ 3 ]

2 голосов
/ 12 ноября 2011

Обычный способ очистки памяти unordered_set такой же, как и для любого стандартного контейнера:

set = std::unordered_set<T>()

Вы также можете использовать:

std::unordered_set<T>().swap(set)

, который былОбычный способ освободить память из контейнеров за несколько дней до ссылки на r-значение.

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

1 голос
/ 12 ноября 2011

unordered_set автоматически освобождает память, которую занимает, если она находится в стеке:

void some_function()
{
    unordered_set<int> set;
    // use the set
} // set memory will be deallocated automatically here
0 голосов
/ 12 ноября 2011

Набор является контейнером на основе узлов, поэтому память для узлов действительно освобождается должным образом.Но так как хэш-таблица может вырасти до многих сегментов, вы можете попробовать rehash(1), чтобы снова уменьшить ее - но это только подсказка;набор не требуется для уменьшения количества ведер.

...