В книге Бъёрне Страуструпа инициализация объектов проходит только через construct(). В случае копирования код выглядит вот так:
for (int i=0; i<sz; ++i) alloc.construct(&p[i], elem[i]);
Но если использовать std::copy, то работать будет всё точно так же:
std::copy(elem, elem+sz, p);
Обязательно ли использовать allocator::construct() для инициализации объекта?