std::vector не использует realloc
. При изменении размера контейнера, требующего перераспределения памяти, происходит следующее:
T
с корректной реализацией конструктора перемещения и/или оператора присваивания перемещением), используется перемещение. Это более эффективно, так как старые ресурсы (например, память, выделенная внутри объектов) передаются новым объектам, а старые объекты остаются в валидном, но неопределенном состоянии или очищаются деструкторами.T
является POD-типом или имеет тривиальные операции копирования и перемещения), может использоваться memcpy
или аналогичные низкоуровневые функции для быстрого копирования необработанных данных.Важно отметить, что указатели и ссылки на элементы в старой области памяти становятся недействительными после перераспределения.
c
std::vector не использует realloc
. При изменении размера контейнера, требующего перераспределения памяти, происходит следующее:
T
с корректной реализацией конструктора перемещения и/или оператора присваивания перемещением), используется перемещение. Это более эффективно, так как старые ресурсы (например, память, выделенная внутри объектов) передаются новым объектам, а старые объекты остаются в валидном, но неопределенном состоянии или очищаются деструкторами.T
является POD-типом или имеет тривиальные операции копирования и перемещения), может использоваться memcpy
или аналогичные низкоуровневые функции для быстрого копирования необработанных данных.Важно отметить, что указатели и ссылки на элементы в старой области памяти становятся недействительными после перераспределения.
c
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.