Вопросы к Поиску с Алисой
Механизм динамического выделения памяти в контейнерах C++ работает через использование распределителей памяти (аллокаторов). bmstu-iu8-cpp.github.io Они преобразуют запросы на выделение памяти в физическую операцию её выделения. bmstu-iu8-cpp.github.io
Например, когда просят вектор изменить размер, он смотрит, что ещё не зарезервировал нужное число байтов (буфер вектор всегда выделяет с запасом), после чего выделяет новый буфер. xakep.ru Все существующие элементы переносятся в новый буфер конструктором перемещения через размещающий new по соответствующему адресу. xakep.ru В результате все элементы стоят на своих местах. xakep.ru После этого вектор добирает нужное число элементов в конец массива, создавая каждый размещающим new и конструктором по умолчанию. xakep.ru
Также логика работы с динамической памятью инкапсулирована в специальных классах std::uniqueptr и std::sharedptr, которые называют умными указателями. cpp-python-nsu.inp.nsk.su При конструировании такого объекта происходит выделение памяти, а при вызове деструктора — освобождение. cpp-python-nsu.inp.nsk.su