The std::allocator_traits
template defines a few constants, like propagate_on_container_copy/move_assign
to let other containers know whether they should copy the allocator of a second container during a copy or move operation.
We also have propagate_on_container_swap
, which specifies whether the allocator should be copied during a swap operation.
Is it really necessary for an Allocator Aware container to check for allocator_traits<A>::propagate_on_container_swap
in Container::swap()
? Usually, I implement swap as follows:
Container::swap(Container& other)
{
Container tmp(std::move(other));
other = std::move(*this);
*this = std::move(tmp);
}
In other words, I simply implement swap in terms of move assignment. Since the move assignment operation already has to deal with allocator awareness (by checking propagate_on_container_move_assign
), is it okay to implement Container::swap()
like this, instead of writing a totally different swap
function which explicitly checks for propagate_on_container_swap
?
Aucun commentaire:
Enregistrer un commentaire