При выполнении операции realloc на памяти, управляемой вектором (например, при использовании std::vector и ручной работы с указателем на данные), происходит следующее:
Важно отметить, что std::vector при изменении размера (через resize, push_back при переполнении) сам управляет памятью, используя свою аллокацию и конструкторы/деструкторы объектов. realloc напрямую не используется std::vector. Использование realloc с указателем, полученным от std::vector::data(), приводит к неопределенному поведению, так как std::vector не контролирует этот новый блок памяти и его элементы не будут корректно инициализированы/скопированы с использованием конструкторов копирования.
Если бы это был старый C-style массив, работающий напрямую с malloc/realloc, то там произошло бы именно побайтовое копирование, без вызова конструкторов или операторов присваивания элементов.
В контексте C++ и std::vector, при изменении размера, происходит:
Пример C-style работы с realloc:
c
Пример C++ std::vector:
cpp
Важно разделять низкоуровневую Си-функцию realloc, которая просто работает с сырой памятью, и высокоуровневые операции std::vector, которые управляют жизненным циклом объектов.