A vector
растет по мере добавления к нему данных.Это означает, что не нужно заранее знать, сколько места необходимо для хранения всех его данных.vector
решает эту проблему, выделяя (и перераспределяя) отдельный буфер хранения в куче.Этот буфер управляется изнутри, предоставляя интерфейс, который может быть массивом переменного размера.
Теперь, если объект может быть сконструирован тривиально, можно копировать / клонировать объект, просто используя memcpy(dest, &a, sizeof(a))
,Если бы сделать это для vector
, у него было бы 2 векторных объекта, указывающих на один и тот же буфер хранения.Это приведет к ужасному неопределенному поведению.Поэтому для копирования вектора необходимо продублировать внутреннее хранилище, продублировать его параметры, а затем установить внутренний указатель, указывающий на правильный буфер хранилища.Это требует внутренних знаний об объекте.
std::array
однако, статический размер установлен во время компиляции.Он не имеет внутренних указателей и поэтому может быть скопирован просто с помощью memcpy
.Поэтому копировать тривиально.