该std::allocator_traits模板定义了一些常量,比如propagate_on_container_copy/move_assign让其他容器知道在复制或移动操作期间是否应该复制第二个容器的分配器.
我们还有propagate_on_container_swap,它指定是否应在交换操作期间复制分配器.
是不是真的有必要为一个分配器意识到容器检查allocator_traits<A>::propagate_on_container_swap的Container::swap()?通常,我按如下方式实现swap:
Container::swap(Container& other)
{
Container tmp(std::move(other));
other = std::move(*this);
*this = std::move(tmp);
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我只是根据移动分配实现交换.由于移动分配操作已经必须处理分配器感知(通过检查propagate_on_container_move_assign),是否可以Container::swap()像这样实现,而不是编写一个完全不同的swap函数,显式检查propagate_on_container_swap?