Нет: resize(0) удаляет элементы, но сохраняет capacity и выделенный буфер. В приведённом примере память освободится при уничтожении v2 на выходе из функции.
Проверка, происходит ли освобождение памяти при вызове resize у std::vector
Нет: resize(0) удаляет элементы, но сохраняет capacity и выделенный буфер. В приведённом примере память освободится при уничтожении v2 на выходе из функции.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо определить, будет ли освобождена ранее выделенная память после выполнения метода resize.
void vector_method()
{
std::vector<int> v1;
// ========
v1.push_back(1);
v1.push_back(2);
std::vector<int> v2;
v2.swap(v1);
v2.resize(0);
}
Ответ
Нет: resize(0) удаляет элементы, но сохраняет capacity и выделенный буфер. В приведённом примере память освободится при уничтожении v2 на выходе из функции.
После swap буфер с двумя элементами принадлежит v2, а v1 пуст. Вызов resize(0) устанавливает размер в ноль; для int нет заметной пользовательской работы деструктора, но правило одинаково для типов с ресурсами.
shrink_to_fit позволяет попросить уменьшить ёмкость, однако запрос не обязателен к исполнению. Для гарантированного окончания владения буфером достаточно уничтожить сам контейнер; уменьшение size и освобождение памяти — разные операции.