Является ли память std::vector свободной?
Предположим, что у меня есть std::vector структур. Что происходит с памятью, если вектор ясен() 'd?
std::vector<myStruct> vecs;
vecs.resize(10000);
vecs.clear();
Будет ли освобождена память или будет привязана к переменной vecs в качестве повторно используемого буфера?
Ответы
Ответ 1
Память остается прикрепленной к вектору. Если вы хотите его освободить, обычным является обмен с пустым вектором. С++ 11 также добавляет функцию shrink_to_fit
, которая предназначена для обеспечения примерно одинаковой возможности более непосредственно, но она не обязательна (другими словами, она, вероятно, освободить дополнительную память, но по-прежнему не требуется для этого).
Ответ 2
Память вектора не гарантируется. Вы не можете безопасно получить доступ к элементам после очистки. Чтобы убедиться, что память освобождена, Скотт Мейерс посоветовал сделать это:
vector<myStruct>().swap( vecs );
Cplusplus.com имеет следующие значения:
Удаляет все элементы из вектора, вызывая их соответствующие деструкторы, оставляя контейнер размером 0.
Вместимость вектора не изменяется, и перераспределение не происходит из-за для вызова этой функции. Типичная альтернатива, которая перераспределение - использовать swap:...
Ответ 3
Деструктор вызывается для объектов, но память остается выделенной.
Ответ 4
Нет, память не освобождается.
В С++ 11 вы можете использовать метод shrink_to_fit
для принудительного переноса вектора в свободную память.
http://www.cplusplus.com/reference/vector/vector/