Согласно этим объяснениям Они должны делать то же самое, поскольку, как говорят, allocator::construct
создает объект, а std::uninitialized...
также создает объекты.Но я не знаю, что именно говорит стандарт и какая у вас свобода, когда вы реализуете свои собственные allocator::construct
.
РЕДАКТИРОВАТЬ: Хорошо, в стандарте C ++ 03 говорится в разделе20.1.5 §2 таблицы 32, что construct(p,t)
должен иметь тот же эффект, что и new ((void*)p) T(t)
(для любого стандартного совместимого распределителя, а не только std::allocator
).А в 20.4.4.1 §1 этот uninitialized_copy
должен иметь тот же эффект, что и
for (; first != last; ++result, ++first)
new (static_cast<void*>(&*result))
typename iterator_traits<ForwardIterator>::value_type(*first);
, а в 20.4.4.2 §1 этот uninitialized_fill
имеет эффект
for (; first != last; ++first)
new (static_cast<void*>(&*first))
typename iterator_traits<ForwardIterator>::value_type(x);
Так что я думаю, это не оставляет им места для поведения по-другому.Итак, чтобы ответить на ваш вопрос: да, это так.