Подтвердить что ты не робот

Является ли память std::vector свободной?

Предположим, что у меня есть std::vector структур. Что происходит с памятью, если вектор ясен() 'd?

std::vector<myStruct> vecs;
vecs.resize(10000);
vecs.clear();

Будет ли освобождена память или будет привязана к переменной vecs в качестве повторно используемого буфера?

4b9b3361

Ответ 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/