Пусть у меня есть следующая функция:
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 ?
Память, выделенная под хранение элементов вектора, освобождается, т.к. деструктор локальных объектов вызывается автоматически при выходе из метода
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.
Деструктор объекта вектор:
Уничтожает контейнер. После вызова деструктора высвобождается используемая память. Обратите внимание, что если элементы являются указателями, объекты, на которые они указывают не уничтожаются.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей