Does an allocator.construct loop equal std::uninitialized_copy?
According to this explanations They should do the same, as allocator::construct
is said to construct the object and std::uninitialized...
also constructs the objects. But I do not know, what exactly the standard says and what freedom you have, when implementing your own allocator::construct
.
EDIT: Ok, the C++03 standard states in section 20.1.5 §2 table 32, that construct(p,t)
should have the same effect as new ((void*)p) T(t)
(for any standard compliant allocator, not only std::allocator
). And in 20.4.4.1 §1, that uninitialized_copy
should have the same effect as
for (; first != last; ++result, ++first)
new (static_cast<void*>(&*result))
typename iterator_traits<ForwardIterator>::value_type(*first);
and in 20.4.4.2 §1, that uninitialized_fill
has an effect of
for (; first != last; ++first)
new (static_cast<void*>(&*first))
typename iterator_traits<ForwardIterator>::value_type(x);
So I think that doesn't leave any room for them to behave differently. So to answer your question: yes, it does.