C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- std::unique_ptr
- std::scoped_allocator_adaptor
- operator==,!=(std::scoped_allocator_adaptor)
- std::scoped_allocator_adaptor 的推导指引
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::destroy
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>:: select_on_container_copy_construction
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::allocate
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::inner_allocator
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::outer_allocator
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>:: scoped_allocator_adaptor
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>:: ~scoped_allocator_adaptor
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::operator=
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::deallocate
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::max_size
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::construct
- std::addressof
- std::allocator_traits
- std::default_delete
- std::allocator_arg_t
- std::allocator_arg
- std::weak_ptr
- std::enable_shared_from_this
- std::bad_weak_ptr
- std::auto_ptr
- std::destroy_at
- std::destroy
- std::destroy_n
- std::uninitialized_move
- std::uninitialized_value_construct
- std::owner_less
- std::shared_ptr
- std::to_address
- std::assume_aligned
- std::make_obj_using_allocator
- C 内存管理库
- 低层内存管理
- std::pmr::memory_resource
- std::allocator
- std::pointer_traits
- std::uses_allocator
- std::uses_allocator_construction_args
- std::uninitialized_construct_using_allocator
- std::pmr::polymorphic_allocator
- std::pmr::get_default_resource
- std::pmr::set_default_resource
- std::pmr::new_delete_resource
- std::pmr::null_memory_resource
- std::pmr::synchronized_pool_resource
- std::pmr::unsynchronized_pool_resource
- std::pmr::monotonic_buffer_resource
- std::pmr::pool_options
- std::raw_storage_iterator
- std::get_temporary_buffer
- std::return_temporary_buffer
- std::uninitialized_copy
- std::uninitialized_fill
- std::uninitialized_default_construct
- std::uninitialized_copy_n
- std::uninitialized_fill_n
- std::uninitialized_move_n
- std::uninitialized_default_construct_n
- std::uninitialized_value_construct_n
- std::construct_at
- std::align
- 注释
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
std::scoped_allocator_adaptor
定义于头文件 <scoped_allocator>
|
||
template< class OuterAlloc, class... InnerAlloc > class scoped_allocator_adaptor : public OuterAlloc; |
(C++11 起) | |
std::scoped_allocator_adaptor
类模板是可用于多层容器( map 的 list 的 set 的 vector 等等)的分配器。它以外层分配器类型 OuterAlloc
与零或更多个内层分配器类型 InnerAlloc...
实例化。直接以 scoped_allocator_adaptor
构造的容器用 OuterAlloc
分配其元素,但若元素自身是容器,则它使用首个内存分配器。该容器的元素,若其自身是容器,则使用第二个内存分配器,以此类推。若容器的层级多于内层分配器的数量,则最内层分配器为所有进一步内嵌的容器再度使用。
此适配器的目的是在内嵌容器中正确初始化有状态分配器,例如在所有层次的嵌套容器都必须置于同一共享内存段时。适配器的构造函数接收列表中所有分配器的参数,而每个内嵌容器从适配器按需获得其分配器的状态。
为了 scoped_allocator_adaptor
的目的,若下个内层分配器是 A
,则任何满足 std::uses_allocator<T,A>::value == true 的类 T
参与递归,如同它是容器,另外, std::pair 被当做这种容器,通过 scoped_allocator_adaptor::construct 的指定重载。
典型实现保有一个 std::scoped_allocator_adaptor<InnerAllocs...>
作为成员对象。
成员类型
类型 | 定义 |
outer_allocator_type
|
OuterAlloc |
inner_allocator_type
|
scoped_allocator_adaptor<InnerAllocs...> ,或若 sizeof...(InnerAllocs) == 0 则为 scoped_allocator_adaptor<OuterAlloc> |
value_type
|
std::allocator_traits<OuterAlloc>::value_type |
size_type
|
std::allocator_traits<OuterAlloc>::size_type |
difference_type
|
std::allocator_traits<OuterAlloc>::difference_type |
pointer
|
std::allocator_traits<OuterAlloc>::pointer |
const_pointer
|
std::allocator_traits<OuterAlloc>::const_pointer |
void_pointer
|
std::allocator_traits<OuterAlloc>::void_pointer |
const_void_pointer
|
std::allocator_traits<OuterAlloc>::const_void_pointer |
propagate_on_container_copy_assignment
| |
propagate_on_container_move_assignment
| |
propagate_on_container_swap
| |
is_always_equal (C++17)
| |
rebind
|
成员函数
创建新的 scoped_allocator_adaptor 实例 (公开成员函数) | |
析构 scoped_allocator_adaptor 实例 (公开成员函数) | |
赋值一个 scoped_allocator_adaptor (公开成员函数) | |
获得一个 inner_allocator 引用 (公开成员函数) | |
获得一个 outer_allocator 引用 (公开成员函数) | |
用外层分配器分配未初始化存储 (公开成员函数) | |
用外层分配器解分配存储 (公开成员函数) | |
返回外层分配器所支持的最大分配大小 (公开成员函数) | |
在分配的存储上构造一个对象,若适合则传递内存分配器至其构造函数 (公开成员函数) | |
析构处于分配的存储的对象 (公开成员函数) | |
复制 scoped_allocator_adaptor 与其所有分配器的状态 (公开成员函数) |
非成员函数
(C++20 中移除) |
比较两个 scoped_allocator_adaptor 实例 (公开成员函数) |
推导指引(C++17 起)
示例
运行此代码
#include <vector> #include <scoped_allocator> #include <boost/interprocess/managed_shared_memory.hpp> #include <boost/interprocess/allocators/adaptive_pool.hpp> namespace bi = boost::interprocess; template<class T> using alloc = bi::adaptive_pool<T, bi::managed_shared_memory::segment_manager>; using ipc_row = std::vector<int, alloc<int>>; using ipc_matrix = std::vector<ipc_row, std::scoped_allocator_adaptor<alloc<ipc_row>>>; int main () { bi::managed_shared_memory s(bi::create_only, "Demo", 65536); // 在共享内存中创建 vector 的 vector ipc_matrix v(s.get_segment_manager()); // 对于所有这些附加项,内层 vector 从外层 vector 的 scoped_allocator_adaptor // 获得其分配器参数 v.resize(1); v[0].push_back(1); v.emplace_back(2); std::vector<int> local_row = {1,2,3}; v.emplace_back(local_row.begin(), local_row.end()); bi::shared_memory_object::remove("Demo"); }
参阅
(C++11) |
提供关于分配器类型的信息 (类模板) |
(C++11) |
检查指定的类型是否支持使用分配器的构造 (类模板) |
默认的分配器 (类模板) |