Резервирование памяти в std::vector

252
15 февраля 2018, 15:40

Хочу реализовать свой вектор для лучшего понимания работы данного контейнера. Можете объяснить за счет чего происходит "резервирование" памяти в векторе. Сомневаюсь, что там используют malloc, а потом при расширении контейнера placement new. Еще было предположение что просто инициализируется память конструктором по-умолчанию, а затем, снова таки, при расширении происходит обычное присваивание.

P. S. Очень тяжело читать исходники, так как я программирую только год

Answer 1

Как уже упоминалось в комментариях к вопросу, работа с памятью в векторе идёт через аллокатор, которым параметризирован шаблонный класс std::vector. Если он явно не указал, используется аллокатор по умолчанию. Никаких инициализаций конструктором по умолчанию не происходит, т.к. резервирование, а по сути функция std::vector::reserve не должна создавать объекты, её задача лишь подготовить плацдарм (память).

Когда вектор уже содержит какие-то объекты, резервирование при необходимости выполняет перемещение (вызывает перемещающий конструктор) существующих объектов в новую свежевыделенную память.

READ ALSO
Visual Studio 15 выдает ошибку, которой нет

Visual Studio 15 выдает ошибку, которой нет

Я установил движок cocos2d-x-316 на VS15

226
Как вернуться к вводу данных, если допущена ошибка при вводе

Как вернуться к вводу данных, если допущена ошибка при вводе

Ну, если введено что-то не то - значит, сбросить поток, попросить ввести зановоВот примерный набросок для целого числа в конкретном диапазоне...

258
Переносимость *_s функций (_CRT_SECURE_NO_WARNINGS)

Переносимость *_s функций (_CRT_SECURE_NO_WARNINGS)

При попытках скомпилировать код из серии

193