Как работает аллокация памяти в контейнерах STL?

130
13 мая 2021, 10:00

У меня есть двухсвязный список std::list как protected обьект в классе A:

class A {
  public:
    std::list<int> list;
}

в main я динамически выделяю память под обьект класса A и додаю 3 integer после чего освобождаю память

int main() {
  A* a = new A();
  a.list.push_back(1);
  a.list.push_back(2);
  a.list.push_back(3);
  delete a;
  return 1;
}

удалится ли list при delete? и как std::list аллоцирует память?

Answer 1

Как std::list аллоцирует память совершенно не важно, важно только то, что для этого используется тот аллокатор, который передан ему в качестве аргумента шаблона (по умолчанию используется std::allocator). При разрушении объекта std::list он освобождает всю память которую выделил, а также вызывает деструкторы для каждого элемента, которые были в него добавлены.

Вышеописанное справедливо для любого контейнера стандартной библиотеки C++.

READ ALSO
Ошибка во время запуска SFML программы на Eclipse

Ошибка во время запуска SFML программы на Eclipse

Программа начинает выполняться, отображается окноПотом зависает,завершается с этой ошибкой

84
Реализация отскока круга от растра

Реализация отскока круга от растра

Третий день пытаюсь реализовать реалистичный отскок, вроде того, который был у гранаты в Worms 2DПерепробовал несколько алгоритмов, но все они...

220
Абстрактный класс

Абстрактный класс

У меня есть некий абстрактный класс, назовем его Abs:

128