Освобождается ли куча от массива

108
14 августа 2019, 03:50

Пусть у меня есть следующая функция:

int func(void)
{
    std::vector<int> vec1;
    vec1.push_back(10);
    std::vector<int> vec2(vec1.begin(), vec1.end() );
    return 0;
}

Как я понимаю после вызова vec1 и vec2 освобождаются из стэка, как локальные переменные. А освобождается ли куча от массивов, на которые указывают vec1 и vec2 ?

Answer 1

Память, выделенная под хранение элементов вектора, освобождается, т.к. деструктор локальных объектов вызывается автоматически при выходе из метода

RAII:

The C++ library classes that manage their own resources follow RAII: std::string, std::vector, std::thread, and many others acquire their resources in constructors (which throw exceptions on errors), release them in their destructors (which never throw), and don't require explicit cleanup.

Деструктор объекта вектор:

Уничтожает контейнер. После вызова деструктора высвобождается используемая память. Обратите внимание, что если элементы являются указателями, объекты, на которые они указывают не уничтожаются.

READ ALSO
android изменение громкости &ldquo;профиль звука&rdquo;

android изменение громкости “профиль звука”

Когда я пользуюсь некоторыми приложениями, где играет музыка или видео, то когда хочу изменить громкость хард кнопками - вместо громкости...

107
Java stream api

Java stream api

есть такой метод

131
Как избежать того, чтобы формат даты изменялся и дописывалось смещение +03:00?

Как избежать того, чтобы формат даты изменялся и дописывалось смещение +03:00?

Есть рест - сервис, принимающий xml и обрабатывающий его библиотекой jaxbДля одного из полей написан адаптер для даты:

99
При попытке получить данные из БД падает NPE

При попытке получить данные из БД падает NPE

Создал метод dbstore, который должен создавать базу, если она пуста, извелкать всех пользователей и тд

146