Проверка, происходит ли освобождение памяти при вызове resize у std::vector

Нет: resize(0) удаляет элементы, но сохраняет capacity и выделенный буфер. В приведённом примере память освободится при уничтожении v2 на выходе из функции.

Короткий ответ

Что ответить на собеседовании

Нет: 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 и освобождение памяти — разные операции.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее