Namespaces
Variants

Memory management library

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)

目录

智能指针 (始于 C++11)

智能指针能够实现自动化的、异常安全的对象生命周期管理。

定义于头文件 <memory>
指针类别
(C++11)
具有独享对象所有权语义的智能指针
(类模板)
(C++11)
具有共享对象所有权语义的智能指针
(类模板)
(C++11)
指向由 std::shared_ptr 管理的对象的弱引用
(类模板)
(C++11 中弃用) (C++17 中移除)
具有严格对象所有权语义的智能指针
(类模板)
辅助类
(C++11)
提供基于所有者的共享指针和弱指针混合类型排序
(类模板)
(C++26)
为共享指针和弱指针提供基于所有者的哈希
(类)
提供基于所有者的共享指针和弱指针混合类型相等比较
(类)
允许对象创建指向自身的 shared_ptr
(类模板)
访问指向已销毁对象的 weak_ptr 时抛出的异常
(类)
unique_ptr 的默认删除器
(类模板)
智能指针适配器 (C++23 起)
(C++23)
与外部指针设置器交互并在析构时重置智能指针
(类模板)
(C++23)
创建带有关联智能指针和重置参数的 out_ptr_t
(函数模板)
与外部指针设置器交互,从智能指针获取初始指针值,并在析构时重置它
(类模板)
(C++23)
创建带有关联智能指针和重置参数的 inout_ptr_t
(函数模板)

分配器

分配器是封装内存分配策略的类模板。这使得泛型容器能够将内存管理与数据本身解耦。

定义于头文件 <memory>
默认分配器
(类模板)
提供分配器类型的信息
(类模板)
记录由 allocate_at_least 分配的存储地址和实际大小
(类模板)
用于选择支持分配器的构造函数的标签
(标签)
检查指定类型是否支持使用分配器构造
(类模板)
准备匹配给定类型所需的使用分配器构造风格的参数列表
(函数模板)
通过使用分配器构造方式创建给定类型的对象
(函数模板)
在指定内存位置通过使用分配器构造方式创建给定类型的对象
(函数模板)
定义于头文件 <scoped_allocator>
为多层容器实现多层分配器
(类模板)
定义于头文件 <memory_resource>
定义于命名空间 std::pmr
基于其构造时使用的 std::pmr::memory_resource 支持运行时多态性的分配器
(类模板)

内存资源 (自 C++17 起)

内存资源实现了可由 std::pmr::polymorphic_allocator 使用的内存分配策略。

定义于头文件 <memory_resource>
定义于命名空间 std::pmr
封装内存资源的抽象接口类
(类)
返回使用全局 std::pmr::memory_resource 的静态程序级内存资源,该资源通过全局 operator new operator delete 进行内存分配与释放
(函数)
返回不执行任何内存分配的静态 std::pmr::memory_resource
(函数)
获取默认的 std::pmr::memory_resource
(函数)
设置默认的 std::pmr::memory_resource
(函数)
池资源的一组构造函数选项
(类)
用于管理不同块大小内存池分配的线程安全 std::pmr::memory_resource
(类)
用于管理不同块大小内存池分配的非线程安全 std::pmr::memory_resource
(类)
特殊用途的 std::pmr::memory_resource ,仅在资源销毁时释放已分配的内存
(类)

未初始化内存算法

定义于头文件 <memory>
复制对象范围到未初始化的内存区域
(函数模板)
复制指定数量的对象到未初始化的内存区域
(函数模板)
复制对象到由范围定义的未初始化内存区域
(函数模板)
复制对象到由起始点和计数定义的未初始化内存区域
(函数模板)
移动对象范围到未初始化的内存区域
(函数模板)
移动指定数量的对象到未初始化的内存区域
(函数模板)
通过 默认初始化 在由范围定义的未初始化内存区域中构造对象
(函数模板)
通过 默认初始化 在由起始点和计数定义的未初始化内存区域中构造对象
(函数模板)
通过 值初始化 在由范围定义的未初始化内存区域中构造对象
(函数模板)
通过 值初始化 在由起始点和计数定义的未初始化内存区域中构造对象
(函数模板)
(C++17)
销毁给定地址处的对象
(函数模板)
(C++17)
销毁对象范围
(函数模板)
(C++17)
销毁范围内的指定数量的对象
(函数模板)
在给定地址处创建对象
(函数模板)

受约束的未初始化内存算法 (since C++20)

C++20 提供了 受约束的 未初始化内存算法,这些算法接受范围参数或迭代器-哨兵对。

定义于头文件 <memory>
定义于命名空间 std::ranges
指定迭代器、哨位和范围上的某些操作不抛出异常
( 仅用于说明的概念* )
复制对象范围到未初始化的内存区域
(算法函数对象)
复制指定数量的对象到未初始化的内存区域
(算法函数对象)
复制对象到由范围定义的未初始化内存区域
(算法函数对象)
复制对象到由起始点和计数定义的未初始化内存区域
(算法函数对象)
移动对象范围到未初始化的内存区域
(算法函数对象)
移动指定数量的对象到未初始化的内存区域
(算法函数对象)
通过 默认初始化 在由范围定义的未初始化内存区域中构造对象
(算法函数对象)
通过 默认初始化 在由起始点和计数定义的未初始化内存区域中构造对象
(算法函数对象)
通过 值初始化 在由范围定义的未初始化内存区域中构造对象
(算法函数对象)
通过 值初始化 在由起始点和计数定义的未初始化内存区域中构造对象
(算法函数对象)
销毁给定地址的对象
(算法函数对象)
销毁对象范围
(算法函数对象)
销毁范围内的指定数量的对象
(算法函数对象)
在给定地址创建对象
(算法函数对象)

显式生命周期管理 (始于 C++23)

定义于头文件 <memory>
在给定存储中隐式创建对象并复用其对象表示
(函数模板)

组合类设计类型 (始于 C++26)

定义于头文件 <memory>
(C++26)
包含动态分配对象且具有类值语义的包装器
(类模板)
包含动态分配对象且具有类值语义的多态包装器
(类模板)

杂项

定义于头文件 <memory>
提供指针式类型的信息
(类模板)
(C++20)
从指针式类型获取原始指针
(函数模板)
(C++11)
获取对象的实际地址,即使 & 运算符被重载
(函数模板)
(C++11)
在缓冲区中对齐指针
(函数)
告知编译器指针已对齐
(函数模板)
检查指针是否指向对齐值至少为指定值的对象
(函数模板)

底层内存管理

包括例如 operator new operator delete std::set_new_handler

定义于头文件 <new>

C风格内存管理

包括例如 std::malloc std::free

定义于头文件 <cstdlib>

未初始化存储 (直至 C++20)

提供了若干用于创建和访问原始存储空间的实用工具。

定义于头文件 <memory>
(C++17 中弃用) (C++20 中移除)
允许标准算法将结果存储到未初始化内存中的迭代器
(类模板)
(C++17 中弃用) (C++20 中移除)
获取未初始化存储
(函数模板)
(C++17 中弃用) (C++20 中移除)
释放未初始化存储
(函数模板)

垃圾收集器支持 (直至 C++23)

定义于头文件 <memory>
(C++11) (removed in C++23)
声明对象不可被回收
(函数)
(C++11) (removed in C++23)
声明对象可被回收
(函数模板)
(C++11) (removed in C++23)
声明内存区域不包含可追踪指针
(函数)
(C++11) (removed in C++23)
取消 std::declare_no_pointers 的效果
(函数)
(C++11) (removed in C++23)
列出指针安全模型
(枚举)
(C++11) (removed in C++23)
返回当前指针安全模型
(函数)