在线文档教程

AllocatorAwareContainer

C++概念:分配器

AllocatorAwareContainerContainer的实例。Allocator并在其所有成员函数中使用该实例来分配和释放内存,并在该内存中构造和销毁对象%28,这些对象可能是容器元素、节点,或者,对于无序容器,存储数组%29。

以下规则适用于集装箱结构。

  • 复制构造函数AllocatorAwareContainer%2A%2AS%2A%2A通过调用std::allocator_traits<allocator_type>::select_on_container_copy_construction在要复制的容器的分配器上。

  • 移动构造函数通过从属于旧容器的分配器移动构造来获得它们的分配器实例。

  • 所有其他构造函数都接受一个分配器参数。

替换分配器的唯一方法是复制分配、移动分配和交换:

  • 只有在下列情况下,副本分配才会取代分配器。std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value是true

  • 只有在下列情况下,移动分配才会替换分配器。std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::value是true

  • 只有在以下情况下,交换才会替换分配器std::allocator_traits<allocator_type>::propagate_on_container_swap::value是true具体而言,它将通过对非成员函数交换的不限定调用来交换分配程序实例,请参见Swappable...

注意:在以下情况下,用不相等的分配器交换两个容器propagate_on_container_swapfalse是未定义的行为。

  • 访问者get_allocator()获取用于构造容器或由最近的分配器替换操作安装的分配器的副本。所需传说X容器类型T型元素类型阿T分配器a,b类型为X%28的对象T型类型为X%28 lvalue或Const rvalue%29的房车对象的类型为X%28非参数值%29。米A类对象q分配器类型表达返回类型预/需后/效果复杂性分配器[医]类型阿分配器[医]类型::价值[医]类型必须与X::value相同[医]类型二次编译时弄到[医]分配器%28%29阿二次二次常量x u;二次A是可破坏的空%28%29==true&&u.get[医]分配器%28%29==A%28%29常量Xu%28m%29;二次二次空%28%29==true&&u.get[医]分配器%28%29==m常量x u%2 8t,m%2 9;二次T是CopyInsertable到X的U=t&&u&get[医]分配器%28%29==m线性Xu%28 rv%29;二次移动A的构造函数不能抛出异常U具有与rv施工前相同的元素和相同的分配器。常量Xu%28 rv,m%29;二次T是可移动到X的u元素与RV和u-get的元素相同或相同[医]分配器%28%29==m常数如果m=rv.get[医]分配器%28%29,否则是线性的A=tX&T是CopyInserabletoX和CopyAssignableA==t线性A=RVX&如果分配程序不会被移动分配%28(见%29以上)所取代,则T是可移动到X和MoveAssignable的a的所有现有元素要么被赋值,要么被销毁;a等于rv在分配之前的值。线性A.互换%28b%29空隙二次交换a和b的内容常量概念要求阿

  • DefaultConstructible

T型

  • CopyInsertableX

  • CopyAssignable

注记

分配器感知容器总是调用std::allocator_traits<A>::construct(m, p, args)构造类型对象A在p使用args,与m == get_allocator().默认construct在std::allocator打电话::new((void*)p) T(args),但是专门的分配器可能会选择不同的定义。

标准库

所有标准库容器除外std::arrayAllocatorAwareContainer%2A%2AS%2A%2A

  • std::basic_string

  • std::deque

  • std::forward_list

  • std::list

  • std::vector

  • std::map

  • std::multimap

  • std::set

  • std::multiset

  • std::unordered_map

  • std::unordered_multimap

  • std::unordered_set

  • std::unordered_multiset

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cpPreference.com/w/cpp/Concept/AllocatorAwareContainer